DEV Community

Railander Marques
Railander Marques

Posted on • Updated on

Lambda 'Start-Stop' AWS EC2 - python3.9

1- Crie uma função Lambda no console do AWS Lambda

  • Acesse o console do AWS Lambda e clique no botão "Criar função"
  • Escolha "Autor do zero/Author from scratch" e dê um nome à sua função
  • Escolha a linguagem Python 3.9
  • Clique em "Criar função" para criar a sua função

2- Adicione a política de acesso à função Lambda para gerenciar as instâncias EC2 (Configuration > Execution role)

  • Clique na guia "Permissões" na página da sua função
  • Clique no botão "Adicionar política"
  • Selecione a política "AmazonEC2FullAccess" e clique em "Adicionar política" ou adicione uma política mais granular.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StartInstances",
                "ec2:DescribeInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode
  • Voltando ao painel do Lambda, na aba "Configuration" clique em "General Configuration" no menu a esquerda e altere o tempo de execução da lambda para 5 minutos.

3- Agora vamos adicionar código para ligar e desligar as instâncias com tag Desliga com valor true:

  • Substitua o código da função Lambda pelo seguinte: (Clique em Deploy para salvar)
import boto3

ec2 = boto3.client('ec2')

def lambda_handler(event, context):
    instances = []
    filters = [
        {
            'Name': 'tag:Desliga',
            'Values': ['true']
        },
        {
            'Name': 'instance-state-name', 
            'Values': ['running', 'stopped']
        }
    ]
    response = ec2.describe_instances(Filters=filters)
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            instances.append(instance['InstanceId'])

    # Ligando as instâncias
    ec2.start_instances(InstanceIds=instances)
    print('Instâncias ligadas: ' + str(instances))

    # Desligando as instâncias
    ec2.stop_instances(InstanceIds=instances)
    print('Instâncias desligadas: ' + str(instances))

    return 'Done!'
Enter fullscreen mode Exit fullscreen mode

4- Adicione o trigger do EventBridge

  • Clique na guia "Add Trigger" na página da sua função lambda
  • Procure por Event Bridge e selecione-o
  • Selecione "Create new rule"
  • Em "Rule name", defina um nome para sua regra. (Ex.: start_stop_instances)
  • Em "Rule description", defina o que a regra faz. (Ex.: Liga e Desliga instancias EC2 às 23 horas de segunda a sexta)
  • Em "Schedule expression" coloque a seguinte sintaxe: cron(0 23 ? * MON-FRI *)
  • Clique em Add para salvar a regra.

5- Teste sua função Lambda

  • Clique no botão "Test" para testar sua função Lambda com um evento de exemplo.
  • Verifique se as instâncias com a tag "Desliga" e valor "true" são ligadas ou desligadas corretamente.

  • Este código em Python 3.9 é uma função Lambda que é executada pelo serviço AWS Lambda e é projetada para ser acionada por um evento do Amazon EventBridge.

  • O objetivo da função é verificar o estado de todas as instâncias EC2 em uma conta da AWS e ligar ou desligar aquelas que possuem uma tag "Desliga" com valor "true".


Explicação:

  • O código acima primeiro define o cliente EC2 com o Boto3.
  • Em seguida, ele utiliza a função describe_instances() para buscar todas as instâncias com a tag "Desliga" com valor "true" e que estejam nos estados "running" ou "stopped".
  • Depois, o código adiciona as IDs das instâncias encontradas em uma lista chamada "instances".
  • Por fim, ele utiliza as funções start_instances() e stop_instances() para ligar e desligar as instâncias, respectivamente, e imprime uma mensagem no console.

Top comments (1)

Collapse
 
daddymundele profile image
Daddy Mundele

muito obrigado passo passo claro