Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Reduza em 60% os custos do Google Compute Engine com o Zorya — GCE Instance Scheduler

By Aviv LauferFeb 26, 20186 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

1 bimx94i4agv23fzxumvs4a

Rodar ambientes de não produção na nuvem é ótimo: eles ficam à mão a qualquer hora, exatamente quando você precisa. Mas essa praticidade às vezes tem um preço. Em geral, instâncias de não produção são usadas durante o dia e, na correria, é fácil esquecer de desligá-las à noite ou nos finais de semana. Cada instância custa só alguns centavos por hora, mas, somando o mês inteiro, a conta chega rapidinho na casa dos milhares de dólares.

Como Premier Partner e MSP Partner do Google, nós da DoiT International trabalhamos com centenas de startups e grandes empresas que rodam seus workloads na Google Cloud Platform de modo geral, e no Google Compute Engine em particular. Nossa missão é reduzir o gasto mensal com nuvem dos nossos clientes, projetando sistemas mais inteligentes e econômicos.

É com essa mentalidade que, hoje, estamos liberando o Zorya como código aberto. Na mitologia eslava, as Zoryas são duas deusas guardiãs. As Zoryas representam a estrela da manhã e a estrela da noite — quem leu ou assistiu American Gods, do Neil Gaiman, provavelmente vai se lembrar dessas irmãs.

Mas, afinal, o que é o Zorya? É um pequeno software que você pode rodar na sua própria conta da Google Cloud Platform e que permite configurar um agendamento para as suas instâncias do Google Compute Engine, criando políticas que valem para todos os projetos da sua organização.

A gente queria muito que o Zorya fosse fácil de instalar e manter, então definimos os seguintes objetivos de design:

  • Rodar o Zorya de forma serverless, reduzindo o esforço de gerenciamento
  • Permitir configurar vários agendamentos e políticas
  • Suportar vários projetos a partir de uma única instância do Zorya
  • Manter o custo operacional baixo

Decidimos construir o Zorya rodando no Google App Engine, Standard Environment. Só essa escolha já garantiu dois dos requisitos:

  1. Operação serverless via App Engine, ou seja, sem precisar gerenciar servidores e com alta disponibilidade e escalabilidade já incluídas.
  2. Custo operacional baixo — graças ao modelo de preços do Google App Engine e ao fato de que o Zorya "acorda" só uma vez por hora; no resto do tempo, ele não consome recursos, o que mantém a conta enxuta.

O backend do Zorya é escrito em Python, com frontend em React. Optamos pelo Google Cloud Datastore como banco de dados para guardar as configurações.

Backend

O backend oferece uma API RESTful simples para consultar e definir schedules e policies.

A entidade Schedule é composta por um nome, um fuso horário e uma matriz 7x24 que representa cada hora de cada dia da semana. O valor 0 indica que a instância deve estar parada, e o valor 1 indica que ela deve estar online.

A entidade Policy é composta por um nome, uma lista de projetos, o nome de um schedule associado e uma lista de labels do Google Compute Engine, ou seja, pares de nomes e valores.

{
"name": "My policy",
"tags": [\
{\
"dev": "sleeper",\
"staging": "resting"\
}\
],
"projetcs": [\
"project-x",\
"y-project"\
],
"schedulename": "my schedule name"
}

A API é bem simples e tem só oito endpoints:

  • add_policy
  • list_schedules
  • del_schedule
  • get_schedule
  • add_policy
  • list_policies
  • get_policy
  • del_policy

A documentação da API e um código de exemplo para consumi-la em algumas linguagens estão disponíveis aqui.

Por meio do scheduler nativo do Google App Engine, uma tarefa verifica as policies para checar se é preciso alterar o estado das instâncias.

https://gist.github.com/avivl/238c047d60a5824700981029ab5b15cahttps://gist.github.com/avivl/4f798263d60192a1e1248df9ed51c630

Se for necessário alterar o estado, o Zorya percorre os projetos relevantes e muda o estado das instâncias que têm os pares de label solicitados.

https://gist.github.com/avivl/ee9e7c11c254e25b890d48c1a873fdc1

Autenticação

Para que o Zorya possa gerenciar instâncias em seu nome em qualquer projeto da sua organização, é preciso criar uma nova entrada no IAM da Organização e atribuir à conta de serviço do Zorya o papel de "Compute Admin".

Primeiro, acesse https://console.cloud.google.com, selecione "IAM & Admin" no menu e, por fim, escolha o nome da sua organização (e não de um projeto específico) no menu suspenso no topo da página:

1 b 2mrjt3qw3x93wamm1b0a

O nome da conta de serviço para a qual você precisa atribuir as permissões é: [email protected]. Basta substituir project-id pelo ID real do projeto em que você implantou o Zorya.

Frontend

Como a gente espera que a maioria das pessoas use a API do Zorya, montamos uma interface bem enxuta para criar schedules e policies. O frontend é baseado em ReactJS e está publicado no módulo padrão da aplicação App Engine.

Para fazer login no app, usamos o Cloud Identity-Aware Proxy. O Cloud IAP verifica a identidade do usuário e decide se ele tem permissão para acessar a aplicação. Configurar é tão simples quanto entrar no console do GCP, habilitar o IAP na sua aplicação App Engine e adicionar os usuários ou grupos que devem ter acesso ao Zorya.

Para começar a usar a interface, basta abrir o navegador em project-id.appspot.com e trocar project-id pelo ID do seu próprio projeto na Google Cloud Platform.

Pela interface, é fácil criar um novo agendamento. Veja este exemplo: de segunda a sexta, das 8h às 19h, no fuso US/Eastern. Nesse período, suas instâncias ficam ligadas; fora dele, o Zorya desliga as instâncias e religa no dia seguinte.

1 9d5lmvhuyf2pmjtctpcqagEditor de Schedules do Zorya

Depois de configurar o agendamento, você precisa definir uma policy para aplicá-lo a um conjunto de instâncias. Digamos que você queira aplicar o agendamento a todas as instâncias do projeto doit-playground com as labels env:dev, role:frontend e app:reoptimize. Assim, só serão afetadas as instâncias que tiverem os três pares de label.

1 pw8la9eyh98tmovrohzzpwConfigurando uma Policy do Zorya

Redução de custos

Usamos o DoiT Cloud Intelligence™ para acompanhar nossos custos na Google Cloud Platform. O DoiT Cloud Intelligence consegue detalhar custos por label dentro de uma Organização do GCP e entrega uma visualização bem clara.

Começamos a usar o Zorya internamente em dezembro de 2017, quando nossos custos com Google Compute Engine giravam em torno de US$ 780/dia, em média. Com o Zorya rodando nos ambientes de desenvolvimento e testes, esses custos caíram para uma média de US$ 320/dia — uma redução de quase 60%.

1 toihb7mxeu58exxuvbqkcq (1)Dashboard do DoiT Cloud Intelligence

Para encerrar

Se você também quiser usar o Zorya para enxugar sua fatura mensal na Google Cloud Platform, dá uma star pra gente lá no GitHub! ;-) E pode mandar pull request à vontade — toda contribuição para evoluir o Zorya é muito bem-vinda!


Quer mais conteúdo? Dá uma olhada no nosso blog ou siga o Aviv no Twitter.