Pourquoi ma fonction Lambda n'a-t-elle pas été déclenchée par ma règle CloudWatch Events ?

Date de la dernière mise à jour : 11/05/2020

J'ai créé une règle Amazon CloudWatch Events à l'aide de l'interface de ligne de commande AWS (AWS CLI), de l'API ou d'AWS CloudFormation, mais la fonction AWS Lambda cible n'est pas appelée. Lorsque je crée ou mets à jour la même règle CloudWatch Events via AWS Management Console, elle fonctionne correctement. Comment puis-je résoudre ce problème ?

Brève description

Lorsque vous créez une règle CloudWatch Events avec une fonction Lambda comme cible à l'aide d'AWS Management Console, les autorisations appropriées sont automatiquement ajoutées dans la stratégie basée sur les ressources de la fonction. Lorsque vous créez la même règle via l'interface de ligne de commande AWS, l'API ou AWS CloudFormation, vous devez ajouter des autorisations dans la stratégie de ressources pour autoriser events.amazonaws.com à appeler la fonction Lambda.

Solution

Vérifier les métriques « Invocations » et « FailedInvocations » pour la règle CloudWatch Events

Sous l'espace de noms AWS/Events, vérifiez les métriques « Invocations » et « FailedInvocations » pour la règle CloudWatch Events. S'il existe un point de données pour les deux métriques, cela signifie que la règle CloudWatch Events a tenté d'appeler la cible mais que l'appel a échoué. Étant donné que la métrique « FailedInvocations » n'inclut pas les appels relancés, vous devez corriger le problème d'autorisation ou la mauvaise configuration sur la cible.

Déterminer si les autorisations appropriées ont été ajoutées pour CloudWatch Events dans la stratégie basée sur les ressources de la fonction Lambda

Ouvrez la console AWS Lambda, puis sélectionnez la fonction cible. Choisissez Permissions (Autorisations), puis confirmez que les autorisations appropriées sont configurées.

Vous pouvez également vérifier la stratégie basée sur les ressources de la fonction à l'aide de la commande GetPolicy. Dans la sortie de la commande, recherchez events.amazonaws.com, une entité de confiance dans la stratégie. Si vous ne parvenez pas à localiser events.amazonaws.com, ajoutez l'autorisation à l'aide de la commande AddPermission. Définissez le mandataire sur events.amazonaws.com. Reportez-vous à l'exemple ci-dessous :

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

Remarque : veillez à remplacer les valeurs de fonction et d'Amazon Resource Name (ARN) par les valeurs correspondantes pour votre fonction et votre ARN.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?