¿Por qué la regla de EventBridge no activó la función Lambda?

4 minutos de lectura
0

He creado una regla de Amazon EventBridge mediante una interfaz de la línea de comandos de AWS (AWS CLI), una API o AWS CloudFormation. Sin embargo, la función de AWS Lambda de destino no se invoca. Al crear o actualizar la misma regla de EventBridge a través de la consola de administración de AWS, la regla funciona correctamente. ¿Cómo se puede solucionar este problema?

Descripción corta

Al crear una regla de EventBridge con una función Lambda como destino, tenga en cuenta lo siguiente:

  • Al usar la consola de EventBridge para crear la regla, se agregan automáticamente los permisos correspondientes a la política de recursos de la función.
  • Cuando la misma regla se crea a través de AWS CLI, SDK o AWS CloudFormation, entonces debe aplicar manualmente los permisos en la política de recursos.

Los permisos conceden al servicio Amazon EventBridge acceso para invocar la función Lambda.

Resolución

Nota: si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de AWS CLI.

Revise las métricas de CloudWatch respecto a la regla de EventBridge

  1. Abra la consola de CloudWatch.
  2. En el panel de navegación de la izquierda, en Metrics (Métricas), seleccione All Matrics (Todas las métricas).
  3. Seleccione el espacio de nombres AWS/Events (AWS/Eventos).
  4. Seleccione las métricas Invocations (Invocaciones) y FailedInvocations (InvocacionesFallidas) correspondientes a la regla que revisa.

Los puntos de datos de Invocation indican que el destino fue invocado por la regla. Si hay puntos de datos de FailedInvocations, significa que hay un problema al invocar el destino. FailedInvocations representa un problema permanente y puede ser el resultado de permisos incorrectos o una mala configuración del destino.

Confirme los permisos adecuados en la política de recursos de la función Lambda

  1. Abra la consola de AWS Lambda.
  2. Seleccione la función de destino.
  3. Seleccione la pestaña Configuración y, a continuación, elija Permisos.
  4. En la sección Política basada en recursos, revise el documento de la política.

A continuación se muestra una política de recursos de ejemplo que permite a EventBridge invocar la función de Lambda:

{
  "Effect": "Allow",
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:region:account-id:function:function-name",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
    }
  },
  "Sid": "InvokeLambdaFunction"
}

Nota: Reemplace el ARN por la región, el ID de cuenta y el nombre del recurso adecuados antes de la implementación.

De otro modo, puede utilizar la API GetPolicy para recuperar la política de recursos de la función de Lambda.

Si la política de recursos existente no contiene los permisos necesarios, entonces actualice la política al seguir los pasos anteriores como referencia. También puede actualizar la política mediante el comando AddPermission en AWS CLI. El siguiente es un ejemplo del comando AddPermission:

aws lambda add-permission \
--function-name MyFunction \
--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule

Agregar una cola de mensajes fallidos de Amazon SQS al destino

EventBridge utiliza colas de mensajes fallidos (DLQ) de Amazon Simple Queue Service (Amazon SQS) para almacenar eventos que no se pudieron entregar a un destino. Se puede adjuntar una DLQ de SQS al destino que informa de FailedInvocations. Los eventos se pueden recuperar de la DLQ y se pueden analizar para obtener más contexto sobre el problema. Una vez completada la corrección, los eventos fallidos anteriores se pueden volver a enviar al destino para su procesamiento.

  1. Abra la regla correspondiente en la consola de EventBridge.
  2. En Targets (objetivos), seleccione Edit (editar) y, a continuación, expanda la sección Aditional settings(configuración adicional).
  3. En Dead-letter queue (cola de mensajes fallidos), elija Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (seleccionar una cola de Amazon SQS en la cuenta de AWS actual para utilizarla como cola de mensajes no entregados).
  4. Seleccione una cola de SQS para usarla como cola de mensajes fallidos (DLQ).
  5. Después de asignar la DLQ, complete los pasos restantes de la sección en Edit Rule (Editar regla) para guardar los cambios.

Información relacionada

La regla se ejecutó, pero la función Lambda no fue invocada

Uso de políticas basadas en recursos para Amazon EventBridge: permisos de AWS Lambda

Política de reintentos de eventos y uso de colas de mensajes fallidos

Mejoras en la recuperación de errores para Amazon EventBridge

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años