AWS — Ligando e Desligando uma Instancia EC2 em horários determinados
Aprenda a automatizar o ligamento e desligamento de instâncias AWS EC2 utilizando funções Lambda

Ola Meninos e Meninas!
Hoje iremos aprender algo muito útil!
Tenho uma instancia que precisa executar rotinas todos os dias das 01:00 até as 04:00, ou seja, não preciso da instancia ligada o dia todo.
Para fazer isto de forma automática iremos utilizar duas funções LAMBDA.
Neste exemplo temos as seguintes condições:
Instancia: brpaloma1
Ligar: 01:00 (No GMT -2 ) / Todos os dias
Desligar: 04:00 (No GMT -2 ) / Todos os dias
Os scripts utilizados neste tutorial estão disponíveis em meu Git:
https://github.com/cmacetko/aws_start_stop
Vamos começar criando a função que ira PARAR a instancia.
- Acesse https://console.aws.amazon.com/lambda/home?region=us-east-1#/functions
- Clique em “Create Function”
- Em “Name” preencha o nome da função (Para nosso teste, irei chamar de “brpaloma1_teste_stop”)
- Em “Runtime” selecione “Python 2.7”
- Em “Role” selecione “Create a custom role”
Agora foi aberto uma janela para criar a ROLE que ira permitir a função LAMBDA ter acesso as instancias.
- Preencha o “Role Name” com o nome da Role (Para nosso teste, irei chamar de “brpaloma1_role”)
- Clique em “View Policy Document”
- Clique em “Edit”
- Clique em “OK” na mensagem que for aberta
- No campo de texto preencha com as regras conforme abaixo:

6. Clique em “Allow”
Automáticamente ira voltar a janela de criação da função.
Selecione a Role recem criada e após clique em “Create Function”:

Checamos a parte divertida!
Precisamos agora criar o script em Python para desligar a instancia que desejamos, note que neste caso iremos desligar uma instancia especifica:

Bom, já temos a Rule, já temos a função, porem precisamos tornar as chamadas a esta função automáticas!
Então selecione “CloudWatch Events” no box “Designer”:

Abaixo será aberto alguns campos:
- Em “Rule” selecione “Create a new rule”
- Em “Rule name” preencha um nome para este evento (Para nosso teste, irei chamar de “chamada_01hrs”)
- Em “Rule type” selecione “Schedule expression”
- Em “Schedule expression” preencha com “cron(00 3 * * ? *)” (No final irei explicar o porque)
- Clique em “Add”

Pronto, você deve ter um ambiente semelhante ao ambiente abaixo:

Antes de finalizar iremos testar esta função:
- Clique em “Test”
2. Em “Event Name” preencha com “Test”
3. Clique em “Create”
4. Clique em “Test” novamente
5. Se não apresentar problema, deve aparecer “Execution result: succeeded”

E por último, NÃO ESQUEÇA, clique em “Save”:

Já temos a função que desliga a instancia pronta, agora vamos para a função de LIGAR a instancia.
- Acesse https://console.aws.amazon.com/lambda/home?region=us-east-1#/functions
- Clique em “Create Function”
- Em “Name” preencha o nome da função (Para nosso teste, irei chamar de “brpaloma1_teste_start”)
- Em “Runtime” selecione “Python 2.7”
- Em “Role” selecione “Choose an existing role” (Veja que iremos utilizar a mesmo Role criada anteriormente)
- Em “Existing Role” selecione a Role que criamos anteriormente “brpaloma1_role”
- Clique em “Create Function”
- No script preencha com o mesmo script, porem trocando STOP para START:

9. Selecione “CloudWatch Events” no box “Designer”:

Abaixo será aberto alguns campos:
- Em “Rule” selecione “Create a new rule”
- Em “Rule name” preencha um nome para este evento (Para nosso teste, irei chamar de “chamada_04hrs”)
- Em “Rule type” selecione “Schedule expression”
- Em “Schedule expression” preencha com “cron(00 6* * ? *)” (No final irei explicar o porque)
- Clique em “Add”
E por último, Clique em “Save”:
Fácil né! ❤ ❤ ❤
Mas você deve estar se perguntando, de onde veio o “cron(00 3 * * ? *)” e o “cron(00 6 * * ? *)”?
O importante são os dois primeiros parâmetros, o primeiro indica o MINUTO e o segundo a HORA:

Porem a função trabalha em UTC,e nós, no Brasil, utilizamos o UTC -3 (e agora no horário de versão UTC -2).
Então, temos de somar 2 horas na hora que queremos.
Se queremos que o cron seja chamado as 20 horas, então configuramos para 22 horas.
É isto Gente! ❤ ❤ ❤
Ei pessoal, temos um novo tutorial com um intuito semelhante:

Por hoje é isto, queridos desenvolvedores! 👩💼
Até logo! 👋