

# Configuración de Amazon ECS para escuchar los eventos de Eventos de CloudWatch
<a name="ecs_cwet"></a>

Obtenga información sobre cómo configurar una función de Lambda simple que escuche eventos de tareas y los escriba en un flujo de registro de Registros de CloudWatch.

## Requisito previo: configurar un clúster de prueba
<a name="cwet_step_1"></a>

Si no dispone de un clúster en ejecución del que capturar eventos, siga los pasos en [Creación de un clúster de Amazon ECS para cargas de trabajo de Fargate](create-cluster-console-v2.md) para crear uno. Al final de este tutorial, se ejecuta una tarea en este clúster para comprobar que la función de Lambda se ha configurado correctamente. 

## Paso 1: Crear la función de Lambda
<a name="cwet_step_2"></a>

En este procedimiento, se crea una función de Lambda sencilla que servirá como destino para los mensajes de la secuencia de eventos de Amazon ECS. 

1. Abra la consola de AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Elija **Crear función**. 

1. En la pantalla **Author from scratch**, haga lo siguiente:

   1. Para **Name (Nombre)**, escriba un valor. 

   1. En **Runtime** (Tiempo de ejecución), elija su versión de Python, por ejemplo, **Python 3.9**.

   1. Para **Role (Rol)**, elija **Create a new role with basic Lambda permissions (Crear un nuevo rol con permisos básicos de Lambda)**

1. Seleccione **Crear función**.

1. En la sección **Código de función**, edite el código de muestra de tal modo que coincida con el siguiente ejemplo:

   ```
   import json
   
   def lambda_handler(event, context):
       if event["source"] != "aws.ecs":
          raise ValueError("Function only supports input from events with a source type of: aws.ecs")
          
       print('Here is the event:')
       print(json.dumps(event))
   ```

   Se trata de una función Python 3.9 sencilla que imprime el evento que envía Amazon ECS. Si se configura todo correctamente, al final de este tutorial verá los detalles de los eventos que aparecerán en la secuencia de registros de CloudWatch Logs asociada a esta función de Lambda.

1. Seleccione **Save**.

## Paso 2: Registrar una regla de eventos
<a name="cwet_step_3"></a>

 A continuación, se crea una regla de eventos de CloudWatch Events que captura eventos de tareas procedentes de los clústeres de Amazon ECS. Esta regla captura todos los eventos procedentes de todos los clústeres dentro de la cuenta donde está definido. Los propios mensajes de tareas contienen información acerca del origen de evento, incluido el clúster en el que reside, que puede usar para filtrar y ordenar eventos mediante programación. 

**nota**  
Cuando se utiliza la Consola de administración de AWS para crear una regla de eventos, la consola agrega automáticamente los permisos de IAM necesarios para conceder permiso a CloudWatch Events para ejecutar la función de Lambda. Si crea una regla de eventos utilizando la AWS CLI, tiene que otorgar este permiso explícitamente. Para obtener más información, consulte [Eventos en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) y [Patrones de eventos de Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) en la *Guía del usuario de Amazon EventBridge*.

**Para dirigir eventos a la función Lambda**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Events (Eventos)**, **Rules (Reglas)**, **Create rule (Crear regla)**.

1. En **Event Source**, seleccione **ECS** como el origen de los eventos. De forma predeterminada, la regla se aplica a todos los eventos de Amazon ECS de todos los grupos de Amazon ECS. Como alternativa, puede seleccionar eventos específicos o un grupo de Amazon ECS específico.

1. En **Destinos**, elija **Agregar destino**. En **Tipo de destino**, elija **Función de Lambda** y, a continuación, seleccione la función de Lambda.

1. Seleccione **Configurar los detalles**.

1. Para **Rule definition**, escriba un nombre y la descripción para su regla y seleccione **Create rule**.

## Paso 3: Cree una definición de tarea
<a name="cwet_step_task-def"></a>

Cree una definición de tarea.

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, elija **Task Definitions**.

1. Elija **Create new Task Definition** (Crear nueva definición de tarea) y **Create new revision with JSON** (Crear nueva revisión con JSON).

1. Copie y pegue la siguiente definición de tarea de ejemplo en el cuadro y, a continuación, elija **Save (Guardar)**.

   ```
   {
      "containerDefinitions": [ 
         { 
            "command": [
               "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
            ],
            "entryPoint": [
               "sh",
               "-c"
            ],
            "essential": true,
            "image": "public.ecr.aws/docker/library/httpd:2.4",
            "logConfiguration": { 
               "logDriver": "awslogs",
               "options": { 
                  "awslogs-group" : "/ecs/fargate-task-definition",
                  "awslogs-region": "us-east-1",
                  "awslogs-stream-prefix": "ecs"
               }
            },
            "name": "sample-fargate-app",
            "portMappings": [ 
               { 
                  "containerPort": 80,
                  "hostPort": 80,
                  "protocol": "tcp"
               }
            ]
         }
      ],
      "cpu": "256",
      "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
      "family": "fargate-task-definition",
      "memory": "512",
      "networkMode": "awsvpc",
      "runtimePlatform": {
           "operatingSystemFamily": "LINUX"
       },
      "requiresCompatibilities": [ 
          "FARGATE" 
       ]
   }
   ```

1. Seleccione **Crear**.

## Paso 4: Probar la regla
<a name="cwet_step_4"></a>

 Por último, se crea una regla de eventos de CloudWatch Events que captura los eventos de tareas procedentes de los clústeres de Amazon ECS. Esta regla captura todos los eventos procedentes de todos los clústeres dentro de la cuenta donde está definido. Los propios mensajes de tareas contienen información acerca del origen de evento, incluido el clúster en el que reside, que puede usar para filtrar y ordenar eventos mediante programación. 

**Para probar la regla**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Elija **Task definitions** (Definiciones de tareas).

1. Elija **console-sample-app-static** y, a continuación, elija **Deploy**(Implementar), **Run new task** (Ejecutar nueva tarea).

1. En **Cluster** (Clúster), elija default (predeterminado) y, a continuación, elija **Deploy** (Implementar).

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Logs** (Registros) y seleccione el grupo de registros para la función de Lambda (por ejemplo, **/aws/lambda/***my-function*).

1. Seleccione una secuencia de registro para ver los datos de los eventos. 