Table of contents
INTRODUÇÃO
Recentemente recebi um projeto para reiniciar uma instância EC2 todos os dias em um horário específico automaticamente. Havia uma premissa de não ter a necessidade de acesso ssh
para configurações de scripts
e crontab
para minimizar um possível erro ou esquecimento no futuro.
Então aqui está o passo a passo que fiz para atingir esse objetivo, vamos lá!
ETAPA 1 - Permissões
1- Acesse o IAM → Policy → alterne para a aba JSON
Defina o nome como “ec2_reboot_instances_policy” → altere no bloco “Resource” para os IDs das instâncias reais para seu cenário
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:TerminateInstances",
"ec2:StopInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxx",
"arn:aws:ec2:us-east-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxx"
]
}
]
}
2- Acesse o IAM → Role → selecione AWS Service → em Use cases for other AWS services → selecione CloudWatch Events
Defina o nome como “ec2_reboot_instances_role” → adicione a política criada no passo anterior → clique na aba Trust Relationships
Verifique se está igual o código abaixo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ETAPA 2 - CloudWatch Events
1- Acesse o CloudWatch → Events → Rules
2- Clique em Create Rule
3- Defina o nome da regra como “EC2_instance_reboot” por exemplo → alterne para Schedule → clique em Continue to create rule
4- Defina sua expressão cron como por exemplo 0 7 * * ? *
(isso irá definir o cron para todos os dias as 7 horas UTC ou 4 horas em Brasília)
50 16 ? MON-FRI *
e isso iria funcionar de segunda a sexta as 16 horas e 50 minutos UTC (ou 13 horas e 50 minutos horário de Brasília)5- Selecione em Target a opção EC2 RebootInstances API Call → insira o ID da instância EC2 que deseja reiniciar → escolha Use execution role criada no primeiro passo
6- Repita o passo anterior para mais instâncias que precisar clicando no botão Add Another Target
CONCLUSÃO
Criamos uma solução para reiniciar automaticamente instâncias EC2 sem a necessidade de acessar ssh
ou fazer qualquer configuração dentro da instância, minimizando qualquer problema, desta forma nosso CloudWatch Events possui um agendamento, e então no momento definido invocará a API necessária para reiniciar a instância EC2. Além disso essa é uma solução barata.