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:

https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/template?templateURL=https:%2F%2Fs3.amazonaws.com%2Fsolutions-reference%2Faws-instance-scheduler%2Flatest%2Finstance-scheduler.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.