Como usar o Lambda para interromper e iniciar instâncias do Amazon EC2 em intervalos regulares?
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 seguintes etapas:
-
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.
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 seguintes etapas:
-
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 boto3region = '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 boto3region = '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 seguintes etapas:
- 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
Você pode usar o AWS CloudTrail para confirmar se a função do Lambda interrompeu ou iniciou a instância.
Conclua as seguintes etapas:
- 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 seguintes etapas:
- 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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 anos