Quero interromper e iniciar automaticamente minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2) para reduzir meu uso do Amazon EC2.
Breve descrição
Use o AWS Lambda e o Amazon EventBridge para interromper e iniciar automaticamente as instâncias do EC2.
Observação: a resolução a seguir é um exemplo simples de solução. Para obter uma solução mais avançada, use o Agendador de Instâncias na AWS. Para mais informações, consulte Como automatizar o início e a interrupção de instâncias da AWS.
Para usar o Lambda para interromper e iniciar instâncias do EC2 em intervalos regulares, realize as seguintes etapas:
- Crie uma política e um perfil do IAM personalizados do AWS Identity and Access Management (IAM) para sua função do Lambda.
- Crie funções do Lambda para interromper e iniciar suas instâncias do EC2.
- Teste as funções do Lambda.
- Crie cronogramas do EventBridge que executem as funções com base em um cronograma.
Às vezes, uma função do Lambda interrompe uma instância e não consegue iniciá-la novamente. Isso pode ocorrer quando um volume do Amazon Elastic Block Store (Amazon EBS) é criptografado e a função do Lambda não está autorizada a usar a chave de criptografia. Para obter mais informações, consulte a política de chaves obrigatórias do AWS KMS para uso com volumes criptografados.
Resolução
Pré-requisito: Obtenha os IDs das instâncias do EC2 que você deseja interromper e iniciar.
Crie uma política e um perfil do IAM para a função do Lambda
Conclua as etapas a seguir:
-
Use o editor de políticas JSON para criar uma política do IAM. Insira o seguinte documento de política JSON no editor de políticas:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
-
Crie um perfil do IAM para o Lambda.
-
Anexe a política do IAM a um perfil do IAM.
Observação: se você usa um volume do Amazon Elastic Block Store (Amazon EBS), talvez seja necessária uma configuração adicional. Se o volume do Amazon EBS estiver criptografado com uma chave do AWS Key Management Service (AWS KMS) gerenciada pelo cliente, adicione kms:CreateGrant à política do IAM.
Crie funções do Lambda para interromper e iniciar suas instâncias
Conclua as etapas a seguir:
-
Abra o console do Lambda e escolha Criar função.
-
Escolha Criar do zero.
-
Em Informações básicas, insira as seguintes informações:
Em Nome da função, insira um nome que descreva a função, como StopEC2Instances ou StartEC2Instances.
Em Runtime, escolha Python 3.9.
Em Permissões, expanda Alterar perfil de execução padrão.
Em Perfil de execução, escolha Usar um perfil existente.
Em Perfil existente, escolha o perfil do IAM.
-
Escolha Criar função.
-
Escolha a guia Código.
-
Na guia lambda_funciton.py, em Origem do código, insira o código a seguir no editor de código para stop_instances:
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
Para start_instances, insira o seguinte código no editor de código:
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
Observação: Substitua us-west-1 pela região da AWS em que suas instâncias estão e InstanceIds pelos IDs das instâncias que você deseja interromper e iniciar.
-
Escolha Implantar.
-
Na guia Configuração, escolha Configuração geral e, em seguida, escolha Editar.
-
Defina o Tempo limite como 10 segundos e escolha Salvar.
Teste as funções do Lambda
Conclua as etapas a seguir:
- Abra o console do Lambda e escolha Funções.
- Escolha uma das funções.
- Escolha a guia Código.
- Na seção Origem do código, escolha Testar.
- Na caixa de diálogo Configurar evento de teste, escolha Criar novo evento de teste.
- Insira o nome do evento e escolha Criar.
Observação: não altere o código JSON do evento de teste.
- Escolha Testar para executar a função.
- Repita as etapas de 1 a 7 para a outra função.
Verifique o status de suas instâncias
Console do Amazon EC2
Antes e depois do teste, verifique o status das suas instâncias para confirmar se suas funções funcionam.
CloudTrail
É possível usar o AWS CloudTrail para confirmar se a função do Lambda interrompeu ou iniciou a instância.
Conclua as etapas a seguir:
- Abra o console do CloudTrail.
- No painel de navegação, selecione Histórico de eventos.
- Na lista suspensa Atributos de pesquisa, escolha Nome do evento.
- Insira StopInstances na barra de pesquisas para examinar os resultados. Em seguida, insira StartInstances.
Se não houver resultados, a função do Lambda não interrompeu nem iniciou as instâncias.
Criar regras do EventBridge que executam funções do Lambda
Conclua as etapas a seguir:
- Abra o console do EventBridge.
- Selecione Criar regra.
- Insira um nome para sua regra, como StopEC2Instances ou StartEC2Instances.
- (Opcional) Em Descrição, insira uma descrição para a regra.
- Em Tipo de regra, escolha Cronograma e, em seguida, escolha Continuar no Agendador do Amazon EventBridge.
- No Padrão de cronograma, procure Ocorrência e escolha Cronograma recorrente.
- Em Tipo de cronograma, escolha um cronograma baseado em taxa ou um cronograma baseado em cron e, em seguida, conclua uma das seguintes etapas:
Em Cronograma baseado em taxas, insira um valor de taxa e escolha um intervalo de tempo em minutos, horas ou dias.
-or-
Para o Cronograma baseado em cron, insira uma expressão que diga ao Lambda quando parar ou iniciar a sua instância.
Observação: as expressões cron seguem o formato UTC. Certifique-se de ajustar a expressão de acordo com o seu fuso horário.
- Na página Selecionar destinos, escolha Função do Lambda na lista suspensa Destino.
- Para Função, escolha a função que interrompe ou inicia suas instâncias.
- Escolha Pular para a análise e criação e, em seguida, escolha Criar.
Observação: você também pode criar regras que reajam aos eventos da sua conta da AWS.
Informações relacionadas
Tutorial: Crie uma regra agendada do EventBridge para funções do AWS Lambda
Eventos dos produtos da AWS
Opções de cobrança e compra do Amazon EC2