Lambda em Python 3.9 para desligar uma ou várias instâncias RDS, informando os nomes dos bancos a serem desligados na linha stop_rds_instances({"instances": ["my-rds-instance-1", "my-rds-instance-2"]}, {})
import boto3
def stop_rds_instances(event, context):
    instances = event.get('instances', [])
    if not instances:
        return {
            'statusCode': 400,
            'body': 'Please provide a list of instances to stop'
        }
    rds_client = boto3.client('rds')
    stopped_instances = []
    for instance in instances:
        try:
            response = rds_client.stop_db_instance(DBInstanceIdentifier=instance)
            stopped_instances.append(instance)
        except rds_client.exceptions.DBInstanceNotFoundFault:
            print(f'{instance} not found')
        except rds_client.exceptions.InvalidDBInstanceStateFault:
            print(f'{instance} already stopped')
    return {
        'statusCode': 200,
        'body': f'Successfully stopped instances: {stopped_instances}'
    }
def lambda_handler(event, context):
    stop_rds_instances({"instances": ["my-rds-instance-1", "my-rds-instance-2"]}, {})
Lambda em Python 3.9 para ligar uma ou várias instâncias RDS, informando os nomes dos bancos a serem desligados na linha start_rds_instances({"instances": ["my-rds-instance-1", "my-rds-instance-2"]}, {})
import boto3
def start_rds_instances(event, context):
    instances = event.get('instances', [])
    if not instances:
        return {
            'statusCode': 400,
            'body': 'Please provide a list of instances to start'
        }
    rds_client = boto3.client('rds')
    started_instances = []
    for instance in instances:
        try:
            response = rds_client.start_db_instance(DBInstanceIdentifier=instance)
            started_instances.append(instance)
        except rds_client.exceptions.DBInstanceNotFoundFault:
            print(f'{instance} not found')
        except rds_client.exceptions.InvalidDBInstanceStateFault:
            print(f'{instance} already started')
    return {
        'statusCode': 200,
        'body': f'Successfully started instances: {started_instances}'
    }
def lambda_handler(event, context):
    start_rds_instances({"instances": ["my-rds-instance-1", "my-rds-instance-2"]}, {})
Para que a função Lambda tenha permissão para desligar ou ligar as instâncias RDS usando o cliente do RDS da AWS, você precisará atribuir uma política ao papel da função que permita o acesso ao serviço RDS. Aqui está um exemplo de política JSON que você pode usar:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "rds:StartDBInstance",
              "rds:StopDBInstance",
              "rds:DescribeDBInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource": [
              "arn:aws:logs:*:*:*"
            ]
        }
    ]
}
Esta política permite que a função Lambda chame os métodos StopDBInstance,StartDBInstance e DescribeDBInstances no serviço RDS, que são necessários para desligar e ligar as instâncias RDS.
Para atribuir essa política ao papel da função lambda, siga estas etapas:
- Abra o console do AWS IAM (Identity and Access Management)
- Clique em "Funções" no painel esquerdo e selecione a função da sua função Lambda
- Clique na guia "Permissões" na parte superior da página
- Clique no botão "Adicionar permissão"
- Selecione "Anexar política existente"
- Procure e selecione a política acima
- Clique no botão "Revisar política"
- Digite um nome descritivo para a política e clique em "Adicionar permissão"
Obs.:
- Alterar o tempo de execução para 1 minuto;
- Para criar o gatilho, clique em Add Trigger, escolha EventBridge e adicione um cron para a função configurada.
 

 
    
Top comments (1)
Excente artigo @aldeiacloud 🤘🏻