Tutorial: Programar Funciones AWS Lambda con CloudWatch Events - Amazon CloudWatch Events

Tutorial: Programar Funciones AWS Lambda con CloudWatch Events

nota

Amazon EventBridge es la forma preferida de administrar sus eventos. Amazon CloudWatch Events y EventBridge son el mismo servicio subyacente y la misma API, pero EventBridge ofrece más características. Los cambios que realice en CloudWatch o EventBridge aparecerán en cada consola. Para obtener más información, consulte Amazon EventBridge.

Puede configurar una regla para ejecutar una función AWS Lambda de manera programada. Este tutorial muestra cómo utilizar la AWS Management Console o la AWS CLI para crear la regla. Si desea utilizar la AWS CLI, pero no la ha instalado, consulte la Guía del usuario AWS Command Line Interface.

CloudWatch Events no proporciona precisión de segundo nivel en expresiones de programación. La mejor resolución al utilizar una expresión Cron es un minuto. Debido a la naturaleza distribuida de los servicios de destino y del CloudWatch Events, el retraso entre el momento en que la regla programada se activa y el momento en que el servicio de destino realiza la ejecución del recurso de destino puede ser de varios segundos. La regla programada se activa dentro de ese minuto, pero no específicamente en el segundo 0.

Paso 1: Crear una función AWS Lambda

Cree una función Lambda para registrar los eventos programados. Especifique esta función cuando cree la regla.

Para crear una función Lambda

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

  2. Si es la primera vez que utiliza Lambda, aparecerá una página de bienvenida. Seleccione Get Started Now. De lo contrario, elija Create a Lambda function (Crear una función Lambda).

  3. En la página Select blueprint (Seleccionar proyecto), escriba hello para el filtro y seleccione el proyecto hello-world.

  4. En la página Configure triggers, elija Next.

  5. En la página Configure function, haga lo siguiente:

    1. Escriba un nombre y la descripción de la función Lambda. Por ejemplo, nombre la función "LogScheduledEvent".

    2. Edite el código de muestra de la función de Lambda. Por ejemplo:

      'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
    3. En Role (Rol), elija Choose an existing role (Elegir un rol existente). En Existing role (Rol existente), seleccione su rol de ejecución básico. De lo contrario, cree un nuevo rol de ejecución básico.

    4. Elija Next (Siguiente).

  6. En la página Review, seleccione Create function.

Paso 2: Crear una regla

Cree una regla para ejecutar su función Lambda de manera programada.

Para crear una regla con la consola

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

  2. En el panel de navegación, elija Events, Create rule.

  3. En Event Source, haga lo siguiente:

    1. Elija Schedule.

    2. Elija Fixed rate of y especifique el intervalo de programación (por ejemplo, 5 minutos).

  4. En Targets (Destinos), elija Add target (Agregar destino), Lambda function (Función Lambda).

  5. En Function (Función), seleccione la función Lambda que ha creado.

  6. Seleccione Configure details.

  7. En Rule definition, escriba un nombre y la descripción de la regla.

  8. Elija Create rule.

Si lo prefiere, puede crear la regla utilizando la AWS CLI. En primer lugar, debe conceder permiso a la regla para invocar su función Lambda. A continuación, puede crear la regla y agregar la función de Lambda como destino.

Para crear una regla mediante la AWS CLI

  1. Utilice el siguiente comando put-rule para crear una regla que se activa de forma programada:

    aws events put-rule \ --name my-scheduled-rule \ --schedule-expression 'rate(5 minutes)'

    Cuando esta regla se activa, genera un evento que sirve como entrada a los destinos de esta regla. El siguiente es un evento de ejemplo:

    { "version": "0", "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule" ], "detail": {} }
  2. Utilice el siguiente comando add-permission para confiar el principal de servicio de CloudWatch Events (events.amazonaws.com) y los permisos de ámbito a la regla con el nombre de recurso de Amazon (ARN) especificado:

    aws lambda add-permission \ --function-name LogScheduledEvent \ --statement-id my-scheduled-event \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule
  3. Utilice el siguiente comando put-targets para agregar la función Lambda que ha creado a esta regla para que se ejecute cada 5 minutos:

    aws events put-targets --rule my-scheduled-rule --targets file://targets.json

    Crear el archivo targets.json con el siguiente contenido:

    [ { "Id": "1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:LogScheduledEvent" } ]

Paso 3: Comprobar la regla

Al menos cinco minutos después de completar el paso 2, puede comprobar que se invocó la función Lambda.

Para probar la regla

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

  2. En el panel de navegación, seleccione Events, Rules, el nombre de la regla que ha creado y Show metrics for the rule.

  3. Para ver la salida de la función de Lambda, haga lo siguiente:

    1. En el panel de navegación, elija Logs.

    2. Seleccione el nombre del grupo de registros de la función Lambda (/aws/lambda/function-name).

    3. Seleccione el nombre del flujo de registro para ver los datos proporcionados por la función para la instancia que ha lanzado.

  4. (Opcional) Cuando haya terminado, puede deshabilitar la regla.

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

    2. En el panel de navegación, elija Events (Eventos), Rules (Reglas).

    3. Seleccione la regla y elija Actions (Acciones), Disable (Desactivar).

    4. Cuando se le indique que confirme, seleccione Disable.