Configuración de Amazon ECS para escuchar los eventos de Eventos de CloudWatch
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
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 el tipo de lanzamiento de Fargate 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
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.
Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/
. -
Elija Crear función.
-
En la pantalla Author from scratch, haga lo siguiente:
-
Para Name (Nombre), escriba un valor.
-
En Runtime (Tiempo de ejecución), elija su versión de Python, por ejemplo, Python 3.9.
-
Para Role (Rol), elija Create a new role with basic Lambda permissions (Crear un nuevo rol con permisos básicos de Lambda)
-
-
Seleccione Crear función.
-
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.
-
Seleccione Guardar.
Paso 2: Registrar una regla de eventos
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 AWS Management Console 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 y Patrones de eventos de Amazon EventBridge en la Guía del usuario de Amazon EventBridge.
Para dirigir eventos a la función Lambda
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
En el panel de navegación, elija Events (Eventos), Rules (Reglas), Create rule (Crear regla).
-
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.
-
En Targets (Destinos), elija Add target (Agregar destino); en Target type (Tipo de destino), elija Lambda function (Función de Lambda) y, a continuación, seleccione la función de Lambda.
-
Seleccione Configurar los detalles.
-
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
Cree una definición de tarea.
Abra la consola en https://console.aws.amazon.com/ecs/v2
. -
En el panel de navegación, elija Task Definitions.
-
Elija Create new Task Definition (Crear nueva definición de tarea) y Create new revision with JSON (Crear nueva revisión con JSON).
-
Copie y pegue la siguiente definición de tarea de ejemplo en el cuadro y, a continuación, elija Save (Guardar).
{ "containerDefinitions": [ { "entryPoint": [ "sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "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\"" ], "cpu": 10, "memory": 300, "image": "httpd:2.4", "name": "simple-app" } ], "family": "console-sample-app-static" }
-
Seleccione Crear.
Paso 4: Probar la regla
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
Abra la consola en https://console.aws.amazon.com/ecs/v2
. -
Elija Task definitions (Definiciones de tareas).
-
Elija console-sample-app-static y, a continuación, elija Deploy(Implementar), Run new task (Ejecutar nueva tarea).
-
En Cluster (Clúster), elija default (predeterminado) y, a continuación, elija Deploy (Implementar).
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
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
). -
Seleccione una secuencia de registro para ver los datos de los eventos.