Saltar al contenido

¿Por qué mi regla de EventBridge no invocó mi función de Lambda?

5 minutos de lectura
0

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.

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

Para identificar la causa del problema, consulta la consola de Amazon CloudWatch en el espacio de nombres AWS/Events para ver las siguientes métricas de EventBridge:

  • Comprueba TriggeredRules para identificar si una regla programada se ejecutó o coincidió con un evento específico. Una vez que la regla se haya ejecutado correctamente, EventBridge reenvía el evento al objetivo.
  • Comprueba las **invocaciones ** para identificar si la regla invocó un objetivo. EventBridge realiza varios intentos si no puede entregar el evento al objetivo.
  • Comprueba FailedInvocations para identificar si EventBridge no pudo invocar el objetivo de forma permanente. Esta métrica indica problemas en la configuración del objetivo.

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

EventBridge debe tener permiso para invocar la función de Lambda. Si utilizas la consola de EventBridge para crear la regla, esta agregará automáticamente los permisos necesarios 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ás aplicar manualmente los permisos de la política basada en recursos.

Para usar la consola de Lambda para actualizar los permisos de la función del objetivo, sigue estos pasos:

  1. Abre la consola de Lambda.
  2. Selecciona tu función de Lambda.
  3. Selecciona la pestaña Configuración y, a continuación, Permisos.
  4. En Política basada en recursos, asegúrate de que la política permita a EventBridge invocar la función de Lambda.
  5. Si la política no tiene los permisos necesarios, selecciona Agregar permisos.
  6. Elige Servicio de AWS - EventBridge.
  7. (Opcional) Introduce un ID de estado de cuenta como identificador para la instrucción de la política.
  8. En Entidad principal, introduce events.amazonaws.com.
  9. En ARN de origen, introduce el nombre de recurso de Amazon (ARN) de la regla de EventBridge.
  10. En Acciones, selecciona lambda:InvokeFunction.
  11. Selecciona Guardar.

También puedes usar la API GetPolicy para ver la política basada en recursos de la función. O bien, ejecuta el siguiente comando get-policy de la AWS CLI:

aws lambda get-policy \
    --function-name my-function

Nota: Sustituye my-function por el nombre de tu función.

Para actualizar la política, usa la API AddPermission. O bien, ejecuta el siguiente comando add-permission:

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

Nota: Sustituye MyFunctionpor el nombre de tu función, myID por tu ID de instrucción y arn:aws:events:us-east-1:123456789012:rule/MyRule por el ARN de la regla.

Asegurarse de que el rol de ejecución tenga los permisos necesarios

Si usas un rol de ejecución, asegúrate de que el rol tenga permiso para invocar la función de Lambda.

Si usas la consola de EventBridge para crear el rol, la consola agregará automáticamente los permisos necesarios al rol de IAM adjunto a la regla. Si utilizas AWS CLI, AWS SDK o CloudFormation para crear una regla, deberás aplicar manualmente los permisos al rol de IAM.

Para comprobar los permisos del rol de IAM, sigue estos pasos:

  1. Abre la consola de EventBridge.
  2. Elige Reglas.
  3. Selecciona la regla de EventBridge.
  4. Selecciona la pestaña Objetivo y, a continuación, elige el rol de IAM para la regla.
  5. En Permiso, asegúrate de que la política permita a EventBridge invocar funciones de Lambda y de que la política de confianza permita al rol acceder a Lambda.
    Ejemplo de política de IAM:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "lambda:InvokeFunction"
                ],
                "Resource": [
                    "arn:aws:lambda:region:account-id:function:function-name"
                ]
            }
        ]
    }
    Ejemplo de relación de confianza:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "TrustEventBridgeService",
                "Effect": "Allow",
                "Principal": {
                    "Service": "events.amazonaws.com"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "aws:SourceAccount": "account-id",
                        "aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
                    }
                }
            }
        ]
    }
    Nota: Sustituye arn:aws:lambda:region:account-id:function:function-name por el ARN de la función, account-ID por el ID de la cuenta de AWS y arn:aws:events:region:account-id:rule/rule-name por el ARN de la regla.

También puedes usar la API GetRole para recuperar la política de IAM. O bien, ejecuta el siguiente comando get-role:

aws iam get-role \
    --role-name Test-Role

Nota: Sustituye Test-Role por el nombre de tu rol.

Si la política o la relación de confianza carecen de los permisos necesarios, utiliza la consola de IAM para actualizar la política y la relación de confianza.

Adición de una cola de mensajes fallidos al objetivo de Amazon SQS

EventBridge usa colas de mensajes fallidos en Amazon Simple Queue Service (Amazon SQS) para almacenar los eventos que EventBridge no pudo entregar a un objetivo.

Para obtener más información sobre los motivos por los que se ha producido un error en una invocación, sigue estos pasos para adjuntar una cola de mensajes fallidos al objetivo:

  1. Crea una cola de Amazon SQS para utilizarla como cola de mensajes fallidos.
  2. Abre la consola de EventBridge.
  3. Elige Reglas.
  4. Selecciona la regla de EventBridge.
  5. En Objetivos, seleccione Editar y, a continuación, expande la sección Configuración adicional.
  6. En Cola de mensajes fallidos, elige Selecciona una cola de Amazon SQS en la cuenta de AWS actual para usar como cola de mensajes fallidos.
  7. Elige tu cola de SQS.
  8. Revisa los cambios y, a continuación, selecciona Guardar.

A continuación, vuelve a ejecutar el evento para registrarlo en la cola de mensajes fallidos y obtén más información sobre el motivo por el que la regla no pudo invocar la función.

Información relacionada

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

Recuperación de errores mejorada para Amazon EventBridge