O blog da AWS
Explorando o Instance Scheduler para otimizar os custos de Amazon Elastic Compute Cloud (Amazon EC2)
Uma das grandes mudanças propostas pela computação em nuvem é a mudança da Aquisição de componentes físicos por Consumo de serviços sob demanda com pagamento pelo uso. Dentre as várias possibilidades que temos para otimizar o uso de instâncias Amazon EC2, uma maneira simples seria controlar o “start” e o “stop” das instâncias on-demand, diminuindo assim o total de horas utilizadas no final do mês e diminuindo, consequentemente, o valor final da Invoice.
Para efeito de comparação, vamos considerar que a instância Amazon EC2 permaneça ligada durante todo o mês:
24 horas/dia * 30 dias = 720 horas.
Se considerarmos que essa mesma instância permaneça ligada apenas 10 horas por dia e apenas de Segunda a Sexta-Feira temos o seguinte calculo:
10 horas/dia * 22 dias = 220 horas. (Redução de 69% aproximadamente).
Quando o ambiente possui muitas aplicações, compostas por várias instâncias em cada ambiente, o gerenciamento manual do start/stop se torna um grande desafio. O “Instance Scheduler” é uma solução de fácil configuração para automatizarmos o liga/desliga das instâncias Amazon EC2 e RDS.
O objetivo deste blog post é explorarmos as principais características do Instance Scheduler na prática.
Visão Geral da Arquitetura do Instance Scheduler
Tudo começa com o event trigger do Amazon CloudWatch que está configurado de modo periódico (5 minutos) e aciona o gatilho (trigger) da função AWS Lambda. Essa função Lambda verifica o estado atual de cada instância, com as tags pré-determinadas, e compara com o estado desejado que está armazenado no Amazon DynamoDB. Depois disso a função Lambda aplica a ação de start ou stop nas instâncias.
Figura 1 – Overview de Arquitetura do Instance Schedule
Mão na Massa
Quatro simples passos são necessários para ativar o Instance Scheduler em uma conta AWS.
Passo 1. Provisionamento do Instance Scheduler Stack.
Consideramos que você já fez a autenticação no portal previamente. Para facilitar o provisionamento desta solução a AWS criou uma solução pré configurada com o AWS CloudFormation. Basta clicar no link abaixo para acessar o template:
Figura 2 – Create Stack
Clicar no botão “Next”.
Na próxima tela serão apresentados vários parâmetros que poderão ser customizados para atender diversos cenários. Para fins de exploração inicial, customizei apenas um campo, a Região onde as instâncias serão ligadas/desligadas. Configurei a região para sa-east-1 e deixei todos os outros parâmetros com o valor padrão.
Caso queira mais detalhes sobre cada um dos parâmetros apresentados aqui basta consultar o link abaixo:
https://docs.aws.amazon.com/solutions/latest/instance-scheduler/deployment.html#step1
As próximas telas apresentarão um resumo dos itens selecionados. Clicar em “Next” em todas elas.
Passo 2. Configuração dos Períodos.
O próximo passo será configurar o período para o start e stop das instâncias Amazon EC2. Esses períodos estão armazenados no DynamoDB. Alguns períodos foram pré determinados pelo AWS CloudFormation e poderão ser modificados e/ou duplicados. Basta acessar o DynamoDB, Tables e selecionar a tabela com sufixo “ConfigTable”. Clicando na tab “Items” você terá acesso aos períodos pré-determinados.
Figura 3 – Configurando o Período no DynamoDB
Para alterar um período basta clicar na linha que deseja alterar e customizar os parâmetros pela propria console do DynamoDB.
Figura 4 – Alteração do Período
Passo 3. Configuração dos Schedules.
O Schedule é a configuração que irá unir o Período (configurado no passo anterior) e o TimeZone (Fuso horário). Para se adequar ao fuso horário onde me encontro irei duplicar o item “seattle-office-hour” alterando o nome para “sp-office-hours” e mantive o período para “office-hours”.
|
Figura 5 – Configuração do “Period” e “Schedule”
No exemplo acima as instâncias Amazon EC2 permanecerão ligadas entre 08:00 e 18:00 da manhã.
Passo 4. Tags nas Instâncias.
O próximo passo será determinar quais instâncias serão ligadas e desligadas conforme o schedule que configuramos na etapa anterior. Para isso basta inserir uma tag na instância Amazon EC2.
Clique no menu Services, Amazon EC2.
Selecione a instância Amazon EC2 que participará do Instance Scheduler.
Figura 6 – Instancias Amazon EC2
Clique na Tab “Tags”.
Clique no botão “Add” para inserir uma nova Tag na instância Amazon EC2.
Figura 7 – Add Tags
No campo Key inserir a string “Schedule” e no campo Value inserir o nome do schedule criado anteriormente. No meu exemplo utilizei o “sp-office-hours”.
Pronto! A sua instância Amazon EC2 irá ligar e desligar conforme o agendamento customizado nos 4 passos.
Instance Scheduler em Ação
Defini uma faixa de horário para 08:00 as 17:14hs. Na figura abaixo podemos observar que a máquina virtual está, inicialmente, ligada para fins de teste.
Figura 8 – Instância Amazon EC2 Ligada
Após o horário definido (17:14hs) no instance scheduler, a instância virtual foi automaticamente desligada, como mostra a figura abaixo:
Figura 9 – Instância Amazon EC2 Desligada
Todas as ações do instance scheduler são gravadas no CloudWatch.
Para verificar as ações basta abrir o CloudWatch, clicar no menu Logs, Log Group e clicar na linha correspondente ao Lambda Function do Instance Scheduler. No meu exemplo o Log Group é o /aws/lambda/itiro-instance-schedule-InstanceSchedulerMain
Figura 10 – Logs do CloudWatch
Conclusão
A solução instance scheduler automatiza a ação de ligar e desligar as instâncias Amazon EC2 contribuindo para a otimização dos custos da Amazon EC2. Faz bastante sentido utilizar o instance scheduler em ambientes com um número significativo de instâncias Amazon EC2, pois nesta situação é bastante difícil controlar o Liga/Desliga manualmente. É importante contudo ter atenção ao custo gerado pela própria solução instance scheduler, que é baixa, mas será de responsabilidade do cliente. A documentação oficial informa um custo aproximado para execução durante 1 mês, mas você poderá, também, utilizar a Simple Monthly Calculator para realizar esta estimativa.
Entre na AWS Management Console hoje e descubra quanto se pode economizar no seu ambiente escolhendo quais instâncias Amazon EC2 on demand podem ser ligadas e desligadas de acordo com o seu cenário de uso.
Sobre o autor
Gerson Itiro Hidaka é Arquiteto de Soluções para Global System Integrators. Entusiasta de tecnologias como Internet das Coisas, Drones, Devops e especialista em tecnologias como VMware, Container e Kubernetes. Trabalha em conjunto com os Global System Integrators (GSIs) na condução da jornada de cloud e na construção de soluções para os clientes.