Objetivo:
Configurar o stop agendado de instâncias EC2 usando Lambda em Python e EventBridge.
Navegação
I) Criar função lambda que interrompe instâncias EC2
Na console lambda → Functions → Create function
Author from scratch → Entre com nome da função → Python 3.x → Create function
Faça a edição da Policy na Role criada para a função lambda.
Na função criada → Configuration → Permissions → Selecionar a Role
Na console do IAM faça a edição da Policy.
Expanda a Policy → Edit
Entre com o seguinte JSON para a Policy e clique em Review Policy.
JSON → Inserir o código da permissão → Review policy
ATENÇÃO: Não esquecer de adicionar a vírgula.
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "*"
}
Save changes.
Substitua o código da função pelo exemplo a seguir. No código devem ser ajustadas a região e os IDs das instâncias EC2 que devem se paradas.
Na console Lambda → Code → Substitua o código
import boto3
region = 'us-east-1'
instances = ['i-06c43fa038ae09b45', 'i-014e60f5ec6ff8de5', 'i-01853a2ce9b6185f5']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('Instancias interrompidas: ' + str(instances))
Mude o timeout da função para 2 minutos.
Em Configuration → General configuration → Edit
Time out = 2 min. → Save
Inicie as instâncias EC2 e faça um teste executando a função lambda.
Na função lambda → Test → Test
Verifique a execução em logs. Verifique que as instâncias foram stopadas.
II) Agendamento da função lambda
Para agendar o stop das instâncias entre na console do EventBridge e clique em Create rule.
Entre com nome → Schedule → Next
Selecione o scheduler pattern → Horário de parada → Local time zone → Next
AWS Service → Lambda Function → Seleciona a função → Next
Next
Create rule
Aguarde o horário agendado e verifique o stop das instâncias.
It’s done!