Esse roteiro pode fazer sentido para você, caso esteja precisando automatizar algumas tarefas em seu ambiente, como um simples Start e Stop de suas instâncias EC2 em determinados horários, dias, etc.
Além de automatizar, podemos é claro, economizar!
Facilmente aplicável a ambientes de desenvolvimento e homologação, que normalmente, são mais consumidos durante o dia (8AM às 6PM).
Pré-requisitos
- Acesso ao console AWS e aos serviços: EC2, IAM, Lambda e EventBridge
O que esperar
Agendamento com EventBridge para Start automático de EC2 as 8AM utilizando função lambda e python 3.7
Agendamento com EventBridge para Stop automático de EC2 as 6PM utilizando função lambda e python 3.7
Criação de IAM policy e role para permitir as ações das funções lambda
Classificação das instâncias EC2 utilizando a TAG ‘Scheduled’ com valor ‘yes’
Execução
- Criação de IAM policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
- Criação de IAM role utilizando a policy criada anteriormente — Assim a função lambda poderá assumir temporariamente as permissões que informamos na policy:
- Criação da função lambda para Start utilizando python:
import boto3
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
filters = [{
'Name': 'tag:Scheduled',
'Values': ['yes']
},
{
'Name': 'instance-state-name',
'Values': ['stopped']
}
]
instances = ec2.instances.filter(Filters=filters)
RunningInstances = [instance.id for instance in instances]
print(RunningInstances)
if len(RunningInstances) > 0:
shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).start()
print("Start")
else:
print("All Running")
- Criação da função lambda para Stop utilizando python:
import boto3
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
filters = [{
'Name': 'tag:Scheduled',
'Values': ['yes']
},
{
'Name': 'instance-state-name',
'Values': ['running']
}
]
instances = ec2.instances.filter(Filters=filters)
RunningInstances = [instance.id for instance in instances]
print(RunningInstances)
if len(RunningInstances) > 0:
shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
print("Stopping")
else:
print("All Stopped")
- Criando rule do EventBridge para agendar acionamento da função lambda de Start — Acionamento diário 8AM (GMT-3):
- Criando rule do EventBridge para agendar acionamento da função lambda de Stop — Acionamento diário 6PM (GMT-3):
- No passo final, adicionar TAG ‘Scheduled’ na instância desejada com valor ‘yes’ — Dessa forma, a instância se torna alvo das funções lambda:
Happy building!
Top comments (0)