Solución de problemas de Eventos de CloudWatch - El Amazonas CloudWatch Eventos

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Solución de problemas de Eventos de CloudWatch

nota

Amazon EventBridge is the preferred way to manage your events. Eventos de CloudWatch and EventBridge are the same underlying service and API, but EventBridge provides more features. Changes you make in either CloudWatch or EventBridge will appear in each console. For more information, see Amazon EventBridge.

Puede utilizar los pasos de esta sección para solucionar problemas de Eventos de CloudWatch.

Mi regla se ha activado pero no se ha invocado mi función de Lambda

Asegúrese de que dispone de los permisos adecuados para su función de Lambda. Ejecute el siguiente comando a través de la AWS CLI (sustituya el nombre de función por la función que desee y utilice la región de AWS en la que se encuentra esta función):

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

Debería ver un resultado similar a este:

{ "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" }

Si ve lo siguiente:

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

O si ve el resultado, 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
nota

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

Si utiliza un alias o versión de Lambda específica, debe añadir el parámetro --qualifier en los comandos aws lambda get-policy y aws lambda 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 --qualifier alias or version

Otro motivo por el que la función Lambda podría producir un error de activación es si la política que aparece cuando se ejecuta get-policy contiene un campo SourceAccount. Una configuración SourceAccount evita que CloudWatch Events pueda invocar la función.

Acabo de crear o modificar una regla, pero no coincidía 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 período de tiempo para que los cambios surtan efecto. Si, después de este breve período, los eventos todavía no se asignan, también puede comprobar varias métricas de CloudWatch para la regla como, por ejemplo TriggeredRules, Invocations y FailedInvocations para depuración adicional. Para obtener más información acerca de estas métricas, consulte Métricas y dimensiones de Amazon CloudWatch Events en la Guía del usuario de Amazon CloudWatch.

Si la regla se dispara por un evento de un servicio de AWS, también puede utilizar la acción TestEventPattern para probar el patrón de eventos de la regla con un evento de prueba para asegurarse de que el patrón de eventos de la configuración se ha establecido correctamente. Para obtener más información, consulte TestEventPattern en la Referencia de la API de Amazon CloudWatch Events.

Mi regla no se activa automáticamente en el momento especificado en ScheduleExpression

ScheduleExpressions están en UTC. Asegúrese de que ha establecido la programación para que la regla se active automáticamente en la zona horaria UTC. Si la expresión ScheduleExpression es correcta siga, a continuación, los pasos indicados en Acabo de crear o modificar una regla, pero no coincidía con un evento de prueba.

Mi regla no se activó a la hora esperada

Eventos de CloudWatch no admite la configuración a una hora de inicio exacta cuando se crea una regla para ejecutarla en cada periodo de tiempo. La cuenta atrás hasta la hora de ejecución comienza en cuanto se crea la regla.

Puede utilizar una expresión Cron para invocar destinos a una hora especificada. Por ejemplo, puede utilizar una expresión Cron para crear una regla que se activa cada cuatro horas exactamente en el minuto 0. En la consola de CloudWatch, utilizaría la expresión 0 0/4 * * ? * y con la CLI de AWS utilizaría la expresión cron(0 0/4 * * ? *). Por ejemplo, para crear una regla denominada TestRule que se active cada cuatro horas a través de la CLI de AWS, escribiría lo siguiente en una línea de comando:

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

Puede utilizar la expresión Cron 0/5 * * * ? * para activar una regla cada cinco minutos. Por ejemplo:

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

Eventos de CloudWatch 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 Eventos de CloudWatch, 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 activará dentro de ese minuto, pero no en el segundo 0 preciso.

Mi regla coincide con las llamadas al API de IAM pero no se ha activado

El servicio de IAM solo está disponible en Región EE.UU. Este (Norte de Virginia), por tanto, cualquier evento de llamada a la API de AWS desde IAM solo está disponible en esa región. Para obtener más información, consulte Ejemplos de eventos de Eventos de CloudWatch de servicios admitidos.

Mi regla no funciona, ya que el rol de IAM asociado a la regla no se tiene en cuenta cuando se activa la regla

Los roles de IAM para reglas solo se utilizan para eventos relacionados con flujos de Kinesis. Para funciones de Lambda y temas de Amazon SNS debe proporcionar permisos basados en recursos.

Asegúrese de que los puntos de enlace regionales de AWS STS estén habilitados. Eventos de CloudWatch habla con los puntos de extremo regionales de AWS STS al adoptar el rol de IAM que ha facilitado. Para obtener más información, consulte Activación y desactivación de AWS STS en la región de AWS en la Guía del usuario de IAM.

He creado una regla con un EventPattern que se supone que coincide con un recurso, pero no veo ningún evento que coincida con la regla

La mayoría de los servicios de AWS tratan el carácter de dos puntos (:) o la barra diagonal (/) como el mismo carácter en los nombres de recursos de Amazon (ARN). Sin embargo, Eventos de CloudWatch utiliza una coincidencia exacta en los patrones de eventos y 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.

Además, no todos los eventos tienen datos en el campo de recursos (por ejemplo, los eventos de llamada a la API de AWS desde CloudTrail).

La entrega de mi evento al destino ha sufrido un retraso

Eventos de CloudWatch intenta enviar 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, Eventos de CloudWatch reprograma automáticamente otra entrega en el futuro. Si han transcurrido 24 horas desde la llegada del evento, no se programan más intentos y la métrica FailedInvocations se publica en CloudWatch. Le recomendamos que cree una alarma de CloudWatch para la métrica FailedInvocations.

Algunos eventos no se entregaron en mi destino

Si un destino de una regla de Eventos de CloudWatch está restringido durante un tiempo prolongado, es posible que Eventos de CloudWatch 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 Eventos de CloudWatch realiza en su nombre, es posible que Eventos de CloudWatch no reintente la entrega.

Mi regla se activó más de una vez en respuesta a un único evento. ¿Qué garantía ofrece Eventos de CloudWatch para activar reglas o enviar eventos a los destinos?

En casos excepcionales, la misma regla se puede activar 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.

Cómo evitar bucles infinitos

En Eventos de CloudWatch se pueden crear reglas que producen bucles infinitos, en los que una regla se activa repetidamente. Por ejemplo, una regla puede detectar que las ACL han cambiado en un bucket de S3 y activar software para cambiarlas al estado deseado. Si la regla no se ha escrito minuciosamente, un nuevo cambio de las ACL vuelve a activar la regla, lo que crea un bucle infinito.

Para evitarlo, escriba las reglas de modo que las acciones ya desencadenadas no vuelvan a activar una misma regla. Por ejemplo, la regla puede activarse solo si las ACL tienen un estado incorrecto, en lugar de después de cualquier cambio.

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 la cuota especificada. 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

La cola de Amazon SQS podría estar cifrada. Si crea una regla con una cola de Amazon SQS cifrada como destino, debe tener la siguiente sección incluida en la política de clave KMS para que el evento se envíe correctamente a la cola cifrada.

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

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

Asegúrese de tener establecido el permiso adecuado para su tema de Amazon SNS. Ejecute el siguiente comando a través de la AWS CLI (sustituya el ARN del tema por el tema que desee y utilice la región de AWS en la que se encuentra dicho tema):

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

Debería ver unos atributos de política similares a los siguientes:

"{\"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:Receive\", \"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 ve una política similar a la siguiente, solo tiene el conjunto de políticas predeterminado:

"{\"Version\":\"2008-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:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}}]}"

Si no ve events.amazonaws.com con el permiso Publish en la política, utilice la AWS CLI para establecer el atributo de la política de temas.

Copie la política actual y agregue la siguiente instrucción a la lista de instrucciones:

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

La nueva política debería tener un aspecto similar al de la política que se describió anteriormente.

Establezca los atributos del tema a través de AWS CLI:

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 Eventos de CloudWatch eliminando y, a continuación, volviéndola a añadir a la regla. Eventos de CloudWatch establece los permisos adecuados en el destino.

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

Al crear una regla con Amazon SNS como destino, Eventos de CloudWatch añade el permiso a su tema de Amazon SNS en su nombre. Si elimina la regla poco después de crearla, Eventos de CloudWatch 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.

Qué claves de condición de IAM puedo utilizar con Eventos de CloudWatch

Eventos de CloudWatch admite las claves de condición generales de AWS (consulte Claves disponibles en la Guía del usuario de IAM), además de las siguientes claves de condición específicas del servicio.

Cómo puedo saber si las reglas de Eventos de CloudWatch se infringen

Puede utilizar la siguiente alarma para que le avise cuando las reglas de Eventos de CloudWatch se infringen.

Para crear una alarma que avise cuando las reglas estén rotas

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

  2. Elija Create Alarm. En el panel CloudWatch Metrics by Category, seleccione Events Metrics.

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

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

  5. En Period, elija un valor; por ejemplo, 5 minutes. Seleccione Next (Siguiente).

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

  7. En is, seleccione >= y 1. En for, escriba 10.

  8. En Actions, en Whenever this alarm, elija State is ALARM.

  9. En Send notification to (Enviar notificación a), seleccione un tema de Amazon SNS existente o cree uno nuevo. Para crear un nuevo tema de , elija New list. Escriba un nombre para el nuevo tema de Amazon SNS; por ejemplo: myFailedRules.

  10. En Email list, 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 ALARM.

  11. Elija Create Alarm.