# 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 **IAM** → **Policy** → alterne para a aba **JSON**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772542873/0b093e4f-4ee0-4eb3-9d1b-a25eaa39676e.png align="center")

Defina o nome como **“ec2\_reboot\_instances\_policy”** → altere no bloco **“Resource”** para os IDs das instâncias reais para seu cenário

<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">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</div>
</div>

```json
{
    "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**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772600667/d34c10c9-df65-4f5e-a7c9-7728dc35d4ed.png align="center")

Defina o nome como **“ec2\_reboot\_instances\_role”** → adicione a política criada no passo anterior → clique na aba **Trust Relationships**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772636650/b029b084-f0ca-4632-a54c-abe9f5a8d1fc.png align="center")

Verifique se está igual o código abaixo:

```json
{
    "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**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772760066/815afd35-8c31-494b-8fbd-50cfc4a538dd.png align="center")

2- Clique em **Create Rule**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772795384/3bfcb868-1597-40f4-9b0d-d69684e17ffd.png align="center")

3- Defina o nome da regra como **“EC2\_instance\_reboot”** por exemplo → alterne para **Schedule** → clique em **Continue to create rule**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772833835/d7dbb43c-9b55-4311-89fd-4046c3f7dcd3.png align="center")

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)

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Você pode criar a expressão cron da forma que desejar, outro exemplo poderia ser <code>50 16 ? MON-FRI *</code> 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)</div>
</div>

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772874548/723f6ab6-5cc4-419b-bf48-66f4d980046b.png align="center")

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**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686772907546/5672026a-ebc0-447b-b9f9-7eb63aa75f74.png align="center")

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.

<div data-node-type="callout">
<div data-node-type="callout-emoji">✅</div>
<div data-node-type="callout-text">Espero que essas informações tenham sido úteis para você!</div>
</div>
