WhatsApp

  
Python para crear una función de Lambda que responda automáticamente cuando se apaga una instancia EC2

import boto3
def lambda_handler(event, context):
    # Obtener el ID de la instancia EC2 que desencadenó el evento
    instance_id = event['detail']['instance-id']
    # Crear una instancia del cliente de Amazon EC2
    ec2_client = boto3.client('ec2')
    # Obtener el estado actual de la instancia EC2
    response = ec2_client.describe_instances(InstanceIds=[instance_id])
    instance_state = response['Reservations'][0]['Instances'][0]['State']['Name']
    # Si la instancia se está apagando, detenerla
    if instance_state == 'stopping':
        ec2_client.stop_instances(InstanceIds=[instance_id])
        print('La instancia EC2 con ID {} ha sido detenida'.format(instance_id))
    else:
        print('La instancia EC2 con ID {} no se está apagando'.format(instance_id))
  

Registro del tiempo en que estuvo encendida la máquina en DynamoDB


import boto3
from datetime import datetime
def lambda_handler(event, context):
    # Obtener el ID de la instancia EC2 que desencadenó el evento
    instance_id = event['detail']['instance-id']
    # Crear una instancia del cliente de Amazon EC2
    ec2_client = boto3.client('ec2')
    # Obtener el estado actual de la instancia EC2
    response = ec2_client.describe_instances(InstanceIds=[instance_id])
    instance_state = response['Reservations'][0]['Instances'][0]['State']['Name']
    # Crear una instancia del cliente de DynamoDB
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('log_encendido_maquina')
    # Obtener la fecha y hora actual
    now = datetime.now()
    timestamp = now.strftime('%Y-%m-%d %H:%M:%S')
    if instance_state == 'running':
        # Guardar el registro en la tabla de DynamoDB
        table.put_item(
            Item={
                'instance_id': instance_id,
                'timestamp': timestamp
            }
        )
        print('La instancia EC2 con ID {} ha sido encendida a las {}'.format(instance_id, timestamp))
    else:
        # Detener la instancia
        ec2_client.stop_instances(InstanceIds=[instance_id])
        print('La instancia EC2 con ID {} no se está apagando, se detuvo'.format(instance_id))
  

Explicación del código:

El código utiliza la biblioteca `boto3` para interactuar con los servicios de Amazon Web Services (AWS).

  • Se obtiene el ID de la instancia EC2 que desencadenó el evento.
  • Se crea una instancia del cliente de Amazon EC2 y se obtiene el estado actual de la instancia EC2.
  • Se crea una instancia del cliente de DynamoDB y se define la tabla `log_encendido_maquina`.
  • Se obtiene la fecha y hora actual y se guarda en la variable `timestamp`.
  • Si el estado de la instancia es `running`, se guarda un registro en la tabla de DynamoDB con el ID de la instancia y la marca de tiempo.
  • Si el estado de la instancia no es `running`, se detiene la instancia.

Con este código, se logra guardar en una tabla de DynamoDB el tiempo en que la máquina estuvo encendida. Esto puede ser útil para rastrear y analizar el tiempo de actividad de las instancias EC2.

Configuración de eventos de CloudWatch

Para configurar eventos de CloudWatch que desencadenen la ejecución de la función Lambda, sigue los siguientes pasos:

  1. Inicia sesión en la consola de AWS y navega hasta el servicio CloudWatch.
  2. En el panel de navegación izquierdo, haz clic en "Eventos" y luego en "Reglas de eventos".
  3. Haz clic en el botón "Crear regla de eventos".
  4. En la sección "Event source" (Fuente de eventos), selecciona "Programado".
  5. Configura la frecuencia con la que deseas que se ejecute la regla. Por ejemplo, puedes seleccionar "Horas", ingresar "1" y seleccionar "Especificar horas en intervalos fijos" para que la regla se ejecute cada hora.
  6. En la sección "Targets" (Destinos), haz clic en "Añadir destino" y selecciona "Lambda function" (Función Lambda).
  7. Selecciona la función Lambda que deseas ejecutar cuando se cumpla la regla de eventos.
  8. Haz clic en el botón "Crear" para crear la regla de eventos.

Una vez que hayas configurado la regla de eventos, esta se ejecutará según la frecuencia que hayas establecido y desencadenará la ejecución de la función Lambda. Además, puedes personalizar aún más la regla de eventos para que se desencadene en función de eventos específicos, como cambios en el estado de una instancia EC2.

Si deseas configurar eventos de CloudWatch para encender o apagar una máquina EC2, puedes seguir estos pasos:
 
1. Inicia sesión en la consola de AWS y navega hasta el servicio CloudWatch.

2. En el panel de navegación izquierdo, haz clic en "Eventos" y luego en "Reglas de eventos".

3. Haz clic en el botón "Crear regla de eventos".

4. En la sección "Event source" (Fuente de eventos), selecciona "AWS service" (Servicio de AWS).

5. En el menú desplegable, selecciona "EC2" como el servicio fuente.

6. Debajo de "Event type" (Tipo de evento), selecciona "EC2 Instance State-change Notification" (Notificación de cambio de estado de instancia EC2).

7. En la sección "Targets" (Destinos), haz clic en "Añadir destino" y selecciona "Lambda function" (Función Lambda).
 
8. Selecciona la función Lambda que deseas ejecutar cuando se cumpla la regla de eventos.
9. Haz clic en el botón "Crear" para crear la regla de eventos.

Con esta configuración, la función Lambda se ejecutará cada vez que se produzca un cambio en el estado de una instancia EC2, lo que incluye encender o apagar la máquina.

 Recuerda que debes tener en cuenta los permisos necesarios para que la función Lambda pueda acceder y manipular las instancias EC2.

Además, asegúrate de configurar las acciones correctas dentro de la función Lambda para manejar el encendido o apagado de las máquinas según tus necesidades específicas.
en AWS
Python para crear una función de Lambda que responda automáticamente cuando se apaga una instancia EC2
ASIMOV Ingeniería S. de R.L. de C.V., Emiliano Nava 8 noviembre, 2023
Compartir
Categorías


Iniciar sesión dejar un comentario

  
Disminuir Costos utilizando AWS Lambda