Aprenda a Reiniciar sua instância EC2 com Agendamento Automático

Aprenda a Reiniciar sua instância EC2 com Agendamento Automático

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 IAMPolicy → 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

Lembre-se de alterar a região, número da conta e id da instância do código de exemplo abaixo para seus valores reais
{
    "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 IAMRole → 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 CloudWatchEventsRules

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)

Você pode criar a expressão cron da forma que desejar, outro exemplo poderia ser 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.

Espero que essas informações tenham sido úteis para você!