Ligar e desligar EC2 automaticamente com o AWS CLI
Uma EC2 que só trabalha em alguns horários não precisa ficar ligada o resto do dia: a computação é cobrada por segundo, e parada ela só cobra o armazenamento. Aqui você monta um script de shell com o AWS CLI que liga a instância, espera ela ficar pronta, abre espaço para o seu processo e desliga em seguida, sem clicar em nada no console.
O cenário: uma instância só, que não precisa ficar ligada o tempo todo
Quando se fala em economizar na nuvem, o primeiro caminho que vem à cabeça é a elasticidade: o Auto Scaling reduz a frota (scale-in) ou aumenta (scale-out) sozinho. Só que isso exige uma aplicação preparada para trabalhar com várias instâncias.
Se a sua aplicação não está nesse ponto e você tem uma instância EC2 que guarda dados e não pode ser descartada, o que dá para fazer é parar e ligar essa mesma máquina em horários previsíveis: desligar à noite, ou ligar só para executar um determinado processo.
Isso rende porque a EC2 é cobrada por segundo de uso computacional, com mínimo de um minuto. Todo segundo desligada é segundo que você não paga; com a instância parada, sobra só uma cobrança mínima do armazenamento.
O exemplo abaixo usa uma instância t2.micro, uma só, e um script em shell. O mesmo caminho serve com o SDK, mas aqui o meio é o AWS CLI.
1Ter o AWS CLI funcionando
O script chama o aws, então a máquina precisa ter o AWS CLI instalado. Confira no terminal:
aws --version
Ele devolve o AWS CLI e a versão instalada. Se não responder, instale o CLI antes de continuar.
2Criar o usuário de automação no IAM
O CLI precisa de permissão na conta para mexer em EC2. No IAM, crie um usuário novo:
- Dê um nome ao usuário. Na aula é
automacao-ec2. - Marque o acesso programático, que é a forma como o CLI vai acessar a conta.
- Em permissões, anexe a policy diretamente ao usuário e procure por
ec2. EscolhaAmazonEC2FullAccess. - Revise e crie o usuário. A tela seguinte mostra as credenciais (Access Key e Secret Key).

3Configurar o perfil no CLI
Como eu tenho várias contas na máquina, uso um profile, um nome que identifica a conta com a qual o CLI conversa. Se você trabalha com uma conta só, pode não usar profile. Rode:
aws configure --profile automacaoec2
O CLI pergunta quatro valores. Eu respondi assim:
- AWS Access Key ID: cole a Access Key do usuário criado.
- AWS Secret Access Key: cole a Secret Key.
- Default region name:
us-east-1, a região em que a instância está. - Default output format:
table, para ver o resultado em formato de tabela.
4Parar a instância com um comando
Crie o arquivo do script. Eu chamei de automacao_ec2.sh, porque o meu cenário é Linux e o script é de shell. No Windows a extensão seria .bat, e o script provavelmente funciona sem alteração, talvez com um ajuste ou outro.
Antes de escrever o comando, pegue o ID da instância (o Instance ID que aparece na lista de instâncias do console). É a chave que identifica a máquina em toda operação. Coloque numa variável e chame o stop-instances:
instance_id="i-0123456789abcdef0"
aws ec2 stop-instances --instance-ids $instance_id --region us-east-1 --profile automacaoec2
Troque o valor de instance_id pelo ID da sua instância. Só ele precisa mudar para o script servir no seu projeto. Se você não usa profile, tire o --profile.
Execute o arquivo (./automacao_ec2.sh). A saída em tabela traz o ID da instância e o estado: CurrentState em stopping, código 64. No console, a instância já está parando. Com um comando só, parar a instância ficou automatizado.

Para ligar, o comando é o start-instances, com os mesmos argumentos:
aws ec2 start-instances --instance-ids $instance_id --region us-east-1 --profile automacaoec2
5Organizar em funções e esperar a instância subir
Dois comandos soltos não ficam organizados. O passo seguinte é transformar cada um numa função, com um echo que diz o que está acontecendo:
instance_id="i-0123456789abcdef0"
ligar_ec2() {
aws ec2 start-instances --instance-ids $instance_id --region us-east-1 --profile automacaoec2
echo "Ligando instancia de id: $instance_id"
}
desligar_ec2() {
aws ec2 stop-instances --instance-ids $instance_id --region us-east-1 --profile automacaoec2
echo "Desligando instancia de id: $instance_id"
}
Depois, o roteiro que chama as duas, com a espera no meio:
ligar_ec2
sleep 60
echo 'Instancia ligada'
sleep 60
desligar_ec2
O primeiro sleep 60 é o tempo de boot: 60 segundos é o que eu costumo usar para a instância ficar apta a trabalhar. Se é suficiente para a sua, você confere no console. O echo 'Instancia ligada' marca esse ponto.
É entre o echo e o desligar_ec2 que entram os comandos da sua realidade. Na demonstração, esse espaço ficou só com a espera do segundo sleep 60.
6Rodar e acompanhar no console
Rode o script com a instância parada. Abri o terminal e o console lado a lado para ver os dois. A saída mostra Ligando instancia de id: ... e a instância aparece em pending, código 0. No meu caso, ainda durante a primeira espera de 60 segundos ela já estava em running.

Depois vem a mensagem Instancia ligada, a segunda espera e, no fim, Desligando instancia de id: ..., que é o comando de parar a instância.
Onde colocar o seu processo
O trecho depois da instância ligada é onde entra o que você precisa executar, e aí o limite é a sua criatividade. Exemplos que citei na aula:
- Conectar por SSH e mandar processos para serem executados na instância.
- Recuperar o IP da instância depois de ligada. O IP é dinâmico, então é preciso buscar a cada vez.
- Copiar arquivos para dentro dela.
- Fazer o vínculo com o Route 53 de um site que você quer colocar no ar dinamicamente.
No meu dia a dia uso esse tipo de script em processo de CI: o script liga a máquina quando precisa, faz o backup ou o restore, executa o que for do CI/CD e desliga o recurso. Há recursos da AWS que só se alcança de dentro da VPC, e uma instância que só fica ligada durante o build resolve isso.
Rodando na sua máquina, o script depende dela. Para rodar na AWS, os caminhos que citei foram um agendamento com o CloudWatch, a integração com Lambda ou com Fargate.
Checklist
- Confirme que existe uma instância única que não precisa ficar ligada o tempo todo.
- Rode
aws --versione confirme que o CLI está instalado. - Crie um usuário no IAM com acesso programático e uma policy do EC2 (na aula é a
AmazonEC2FullAccess; prefira a permissão mínima do aviso acima). - Rode
aws configure --profile <nome>com região e formato de saída. - Guarde o ID da instância na variável
instance_iddo script. - Teste
stop-instancesestart-instancese veja o estado no console. - Separe
ligar_ec2edesligar_ec2em funções e deixe umsleep 60entre ligar e o seu processo. - Apague a chave de acesso do usuário quando não precisar mais dela.
Uma instância que só precisa existir durante um processo não precisa ficar ligada o resto do tempo, e é nessa diferença que a conta cai.
O que os alunos dizem

“A Formação AWS me mostrou o caminho, me deu prática de verdade e mudou minha vida.”
Rodrigo Raspinola, Analista Cloud / SRE
Ver depoimento
“Eu queria voltar para a área técnica, mas aprender AWS sozinho só me deixava frustrado.”
William Santos, Tech Lead
Ver depoimento
“Eu sempre fugi da AWS. Achava complicado, distante da minha rotina de dev. Mas só a primeira aula do Bootcamp já mudou tudo: usei o conteúdo para resolver um problema real de um cliente e fui contratado por causa disso.”
André Scherrer, Engenheiro de Software
Ver depoimento
Formação AWS
Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.
Agende uma conversaPrefere assistir?
A aula completa (18 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

