Saltar al contenido

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

4 minutos de lectura
0

Quiero solucionar el motivo por el que la regla de Amazon EventBridge que he creado no invoca mi función de AWS Lambda.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Revisión de las métricas de Amazon CloudWatch para la regla de EventBridge

Sigue estos pasos:

  1. Abre la consola de CloudWatch.
  2. En el panel de navegación, en Métricas, selecciona Todas las métricas.
  3. Selecciona el espacio de nombres AWS/Events.
  4. Elige las métricas TriggeredRules, Invocations y FailedInvocations para la regla. Si es necesario, puedes ver las métricas con la estadística SUM.
    Nota: Si las métricas incluyen puntos de datos FailedInvocations, es posible que la regla no haya podido invocar el objetivo. Para obtener más información, consulta las métricas de EventBridge.

Confirmación de si la política de recursos de la función de Lambda tiene los permisos adecuados

Si utilizas la consola de EventBridge para crear la regla, esta agregará automáticamente los permisos correspondientes a la política basada en recursos de la función. Si utilizas AWS CLI, AWS SDK o AWS CloudFormation para crear una regla, deberá aplicar manualmente los permisos de la política basada en recursos. Los permisos otorgan acceso al servicio de EventBridge, de modo que pueda invocar la función de Lambda.

Revisión de los permisos asociados a la función de Lambda de objetivo

Sigue estos pasos:

  1. Abre la consola de Lambda.
  2. Selecciona la función de Lambda de objetivo.
  3. Selecciona la pestaña Configuración y, a continuación, Permisos.
  4. En la sección Política basada en recursos, revisa el documento de la política.
    Nota: Como alternativa para recuperar la política de recursos de la función de Lambda, utiliza la API GetPolicy o el comando get-policy de la AWS CLI con las entradas adecuadas.

El siguiente ejemplo de política de recursos 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: Sustituye Resource por el ARN de la función de Lambda y SourceArn por el ARN de la regla.

Actualización de la política de recursos

Sigue estos pasos:

  1. Abre la consola de Lambda.
  2. Elige la función de Lambda de objetivo.
  3. Selecciona la pestaña Configuración y, a continuación, Permisos.
  4. En la sección Política basada en recursos, selecciona Agregar permisos.
  5. Elige Servicio de AWS - EventBridge.
  6. Proporciona el ID de instrucción como identificador opcional para tu instrucción de política.
  7. En Entidad principal, usa events.amazonaws.com.
  8. Como ARN de origen, indica un ARN de la regla de EventBridge.
  9. En Acción, selecciona lambda:InvokeFunction en la lista desplegable.
  10. Selecciona Guardar.

Para actualizar la política, también puedes usar la API AddPermission. O bien, ejecuta el comando add-permission de la AWS CLI similar al siguiente ejemplo:

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

Adición de una DLQ al objetivo en Amazon SQS

EventBridge usa colas de mensajes fallidos (DLQ) en Amazon Simple Queue Service (Amazon SQS) para almacenar los eventos que no se pudieron entregar a un objetivo. Adjunta una DLQ de SQS al objetivo que informa sobre FailedInvocations. Para obtener más información sobre el problema, puedes recuperar los eventos de la DLQ. Los eventos fallidos se pueden enviar de nuevo al objetivo para su procesamiento.

Sigue estos pasos:

  1. Abre la regla correspondiente en la consola de EventBridge.
  2. En Objetivos, selecciona Editar y, a continuación, expande la sección Configuración adicional.
  3. En Cola de mensajes fallidos, elige Selecciona una cola de Amazon SNS en la cuenta de AWS actual para usar como cola de mensajes fallidos.
  4. Selecciona una cola de SQS para utilizarla como DLQ.
  5. Tras asignar la DLQ, revisa y guarda los cambios.

Información relacionada

Mi regla se ejecutó pero no se invocó mi función de Lambda

Permisos de AWS Lambda

Uso de colas de mensajes fallidos para procesar eventos no entregados en EventBridge

Recuperación de errores mejorada para Amazon EventBridge