Solución de problemas de Amazon EventBridge - Amazon EventBridge

Solución de problemas de Amazon EventBridge

Puede utilizar los temas de esta sección para solucionar problemas de Amazon EventBridge.

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

Una de las razones por las que es posible que la función de Lambda no se ejecute es si no tiene los permisos adecuados.

Para comprobar los permisos de la función de Lambda
  1. Con la AWS CLI, ejecute el siguiente comando con su función y su región de AWS:

    aws lambda get-policy --function-name MyFunction --region us-east-1

    Debería ver la siguiente salida.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:us-east-1:123456789012:rule/rule-name" } }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:function-name", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Sid": "MyId" } ], "Id": "default" }
  2. Si ve el siguiente mensaje.

    A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.

    O si ve la salida, pero no puede localizar events.amazonaws.com como entidad de confianza en la política, ejecute el siguiente comando:

    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
  3. Si la salida contiene un campo SourceAccount, debe eliminarlo. Una configuración SourceAccount evita que EventBridge pueda invocar la función.

nota

Si la política es incorrecta, también puede editar la regla en la consola de EventBridge eliminando y, a continuación, volviéndola a añadir a la regla. La consola de EventBridge establecerá los permisos adecuados en el destino.

Si utiliza un alias o versión de Lambda específica, agregue el parámetro --qualifier en los comandos aws lambda get-policy y aws lambda add-permission, como se muestra en el siguiente comando.

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 --qualifier alias or version

Acabo de crear o modificar una regla, pero no coincidió con un evento de prueba

Al realizar un cambio en una regla o en sus destinos, los eventos entrantes podrían no comenzar o parar de inmediato la asignación a reglas nuevas o actualizadas. Espere un breve periodo para que los cambios surtan efecto.

Si los eventos siguen sin coincidir después de un breve período, compruebe las métricas TriggeredRules, Invocations y FailedInvocations de CloudWatch para su regla. Para más información sobre estas métricas, consulte Supervisión de Amazon EventBridge.

Si la regla pretende coincidir con un evento de un servicio de AWS, realice una de las siguientes acciones:

  • Use la acción TestEventPattern para comprobar si el patrón de eventos de la regla coincide con un evento de prueba. Para obtener más información, consulte TestEventPattern en la Referencia de API de Amazon EventBridge.

  • Usa el entorno aislado de la consola de EventBridge.

Mi regla no se ejecutó en el momento que especifiqué en la ScheduleExpression

Asegúrese de que ha establecido la programación para la regla en la zona horaria UTC+0. Si la ScheduleExpression es correcta siga, a continuación, los pasos indicados en Acabo de crear o modificar una regla, pero no coincidió con un evento de prueba.

Mi regla no se ejecutó a la hora esperada

EventBridge ejecuta las reglas en un minuto a partir de la hora de inicio que establezca. La cuenta atrás hasta la hora de ejecución comienza en cuanto se crea la regla.

nota

Las reglas programadas tienen un tipo de entrega de guaranteed, lo que significa que los eventos se desencadenarán para cada hora prevista al menos una vez.

Puede utilizar una expresión cron para invocar destinos a una hora especificada. Para crear una regla que se ejecute cada cuatro horas en el minuto 0, siga uno de estos procedimientos:

  • En la consola de EventBridge, se utiliza la expresión cron 0 0/4 * * ? *.

  • Al usar la AWS CLI, se utiliza la expresión cron(0 0/4 * * ? *).

Por ejemplo, para crear una regla denominada TestRule que se ejecute cada 4 horas mediante la AWS CLI, se utiliza el comando siguiente.

aws events put-rule --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'

Para ejecutar una regla cada cinco minutos, se utiliza la siguiente expresión de cron.

aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'

La mejor resolución para una regla de EventBridge que utiliza una expresión cron es de un minuto. La regla programada se ejecuta dentro de ese minuto, pero no específicamente en el segundo 0.

Como EventBridge y los servicios de destino están distribuidos, puede haber un retraso de varios segundos entre el momento en que se ejecuta la regla programada y el momento en que el servicio de destino realiza la acción en el recurso de destino.

Mi regla coincide con las llamadas a la API de los servicios globales de AWS, pero no se ejecutó

Los servicios globales de AWS, como IAM y Amazon Route 53, solo están disponibles en la región Este de EE. UU. (Norte de Virginia), por tanto los eventos de llamadas a la API de AWS desde servicios globales solo están disponibles en esa región. Para obtener más información, consulte Eventos desde servicios de AWS.

El rol de IAM asociado a mi regla se ignora cuando se ejecuta la regla

EventBridge solo usa roles de IAM para las reglas que envían eventos a los flujos de Kinesis. Para reglas que invocan funciones de Lambda o temas de Amazon SNS, debe proporcionar permisos basados en recursos.

Asegúrese de que sus puntos de conexión de AWS STS regionales estén habilitados para que EventBridge pueda utilizarlos al asumir el rol de IAM que ha facilitado. Para obtener más información, consulte Activación y desactivación AWS STS en una región de AWS en la Guía del usuario de IAM.

Mi regla tiene un patrón de eventos que se supone que coincide con un recurso, pero ningún evento coincide

La mayoría de los servicios de AWS tratan los dos puntos (:) o la barra (/) como si fueran el mismo carácter en los Nombres de recursos de Amazon (ARN), pero EventBridge utiliza una coincidencia exacta en los patrones de eventos y las reglas. Asegúrese de usar los caracteres de ARN correctos cuando cree patrones de eventos, de modo que se ajusten a la sintaxis de ARN del evento de la correspondencia.

Algunos eventos, como los eventos de llamadas a la API de AWS de CloudTrail, no tienen nada en el campo de recursos.

La entrega de mi evento al destino sufrió un retraso

EventBridge intenta entregar un evento a un destino durante un máximo de 24 horas, excepto en aquellos casos en que exista una restricción en el registro de destino. El primer intento se realiza en cuanto el evento llega en el flujo de transmisión. No obstante, si el servicio de destino está teniendo problemas, EventBridge reprograma automáticamente otra entrega. Si han transcurrido 24 horas desde la llegada del evento, EventBridge deja de intentar entregar el evento y publica la métrica FailedInvocations en CloudWatch. Le recomendamos que configure una DLQ para almacenar los eventos que no se hayan podido entregar correctamente a un destino. Para obtener más información, consulte Uso de colas de mensajes fallidos para procesar eventos no entregados en EventBridge

Algunos eventos no se entregaron en mi destino

Si el destino de una regla de EventBridge está restringido durante un tiempo prolongado, es posible que EventBridge no pueda reintentar la entrega. Por ejemplo, si el destino no está aprovisionado para gestionar el tráfico de eventos entrantes y el servicio de destino está limitando las solicitudes que EventBridge realiza en su nombre, es posible que EventBridge reintente la entrega.

Mi regla se ejecutó más de una vez en respuesta a un único evento

En casos excepcionales, la misma regla se puede ejecutar más de una vez para un solo evento o tiempo programado, o el mismo destino se puede invocar más de una vez para una regla activada determinada.

Prevención de bucles infinitos

En EventBridge, es posible crear una regla que conduzca a bucles infinitos, donde una regla se ejecuta repetidamente. Si tiene una regla que provoca un bucle infinito, reescríbala para que las acciones que lleve a cabo la regla no coincidan con la misma regla.

Por ejemplo, una regla que detecta que las ACL han cambiado en un bucket de Amazon S3 y, a continuación, ejecuta un software para cambiarlas a un nuevo estado provoca un bucle infinito. Una forma de resolverlo es reescribir la regla para que solo coincida con las ACL que estén en mal estado.

Un bucle infinito puede generar cargos superiores a los esperados rápidamente. Le recomendamos que utilice la función de presupuestos, que le avisa cuando los cargos superan el límite especificado. Para obtener más información, consulte Gestión de costos con presupuestos.

Mis eventos no se entregan en la cola de Amazon SQS de destino

Si su cola de Amazon SQS está cifrada, debe crear una clave de KMS gestionada por el cliente e incluir la siguiente sección de permisos en su política de claves de KMS. Para obtener más información consulte Configuración de permisos de AWS KMS.

{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Mi regla se ejecuta, pero no veo ningún mensaje publicado en mi tema de Amazon SNS

Escenario 1

Necesita permiso para que los mensajes se publiquen en su tema de Amazon SNS. Use el siguiente comando con la AWS CLI, sustituyendo us-east-1 por su región y usando el ARN del tema.

aws sns get-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"

Para tener el permiso correcto, los atributos de su política son similares a los siguientes.

JSON
{ "Version":"2012-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:DeleteTopic", "SNS:GetTopicAttributes", "SNS:Publish", "SNS:RemovePermission", "SNS:AddPermission", "SNS:SetTopicAttributes" ], "Resource": "arn:aws:sns:us-east-1:123456789012:MyTopic", "Condition": { "StringEquals": { "AWS:SourceOwner": "123456789012" } } }, { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-1:123456789012:MyTopic" } ] }

Si no aparece events.amazonaws.com con el permiso Publish en su política, primero copie la política actual y añada la siguiente declaración a la lista de declaraciones.

{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}

A continuación, establezca los atributos del tema mediante la AWS CLI; utilice el comando siguiente.

aws sns set-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
nota

Si la política es incorrecta, también puede editar la regla en la consola de EventBridge eliminando la regla y, a continuación, volviéndola a añadir. EventBridge establece los permisos adecuados en el destino.

Escenario 2

Si su tema de SNS está cifrado, debe incluir la siguiente sección en su política de claves de KMS.

{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Mi tema de Amazon SNS sigue teniendo permisos para EventBridge incluso después de haber eliminado la regla asociada al tema de Amazon SNS

Al crear una regla con Amazon SNS como destino, EventBridge agrega el permiso a su tema de Amazon SNS en su nombre. Si elimina la regla poco después de crearla, EventBridge podría no poder eliminar el permiso de su tema de Amazon SNS. Si esto ocurre, puede eliminar el permiso desde el tema utilizando el comando aws sns set-topic-attributes. Para obtener más información acerca de los permisos basados en recursos para enviar eventos, consulte Uso de políticas basadas en recursos para Amazon EventBridge.

Qué claves de condición de IAM puedo utilizar con EventBridge

EventBridge admite las claves de condición AWS-wide (consulte las claves de contexto de condición de IAM y AWS STS en la Guía del usuario de IAM), además de las claves que se enumeran en Uso de las condiciones de la política de IAM en Amazon EventBridge.

Cómo puedo saber si las reglas de EventBridge se infringen

Puede utilizar la siguiente alarma para que le avise cuando se infrinjan las reglas de EventBridge.

Para crear una alarma que avise cuando se infrinjan las reglas
  1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  2. seleccione Crear alarma. En el panel Métricas de CloudWatch por categoría, seleccione Métricas de eventos.

  3. En la lista de métricas, seleccione FailedInvocations.

  4. Encima del gráfico, seleccione Statistic, Sum.

  5. En Período, seleccione un valor; por ejemplo, 5 minutos. Seleccione Siguiente.

  6. En Umbral de alarma, en Nombre, escriba un nombre único para la alarma; por ejemplo, myFailedRules. En Descripción, escriba una descripción de la alarma; por ejemplo, Reglas que no proporcionan eventos a los destinos.

  7. En es, seleccione >= y 1. En para, escriba 10.

  8. En Acciones, en Siempre que esta alarma, seleccione El estado es ALARMA.

  9. En Enviar notificación a, seleccione un tema de Amazon SNS existente o cree uno nuevo. Para crear un nuevo tema, seleccione Lista nueva. Escriba un nombre para el nuevo tema de Amazon SNS por ejemplo: myFailedRules.

  10. En Lista de correos electrónicos, escriba una lista separada por comas con las direcciones de correo electrónico a las que se van a enviar notificaciones cuando la alarma cambie al estado ALARMA.

  11. Seleccione Crear alarma.