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

Dernière mise à jour : 10/08/2022

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

Brève description

Lorsque vous créez une règle EventBridge avec une fonction Lambda comme cible, tenez compte des points suivants :

  • Lorsque vous utilisez la console EventBridge pour créer la règle, les autorisations appropriées sont ajoutées automatiquement à la politique de ressources de la fonction.
  • Lorsque vous utilisez l'AWS CLI, le kit SDK ou AWS CloudFormation pour créer la même règle, vous devez appliquer manuellement les autorisations dans la politique de ressources.

Les autorisations accordent au service Amazon EventBridge l'accès pour invoquer la fonction Lambda.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Examiner les métriques CloudWatch pour la règle EventBridge

  1. Ouvrez la console CloudWatch.
  2. Dans le panneau de navigation de gauche, sousMétriques, sélectionnezToutes les métriques.
  3. Sélectionnez l'espace de noms AWS/Events (AWS/Événements).
  4. Sélectionnez les métriques Invocations et FailedInvocations pour la règle que vous êtes en train de passer en revue.

Les points de données Invocations indiquent que la cible a été appelée par la règle. Si des points de données FailedInvocations sont présents, il y a un problème lors de l'appel de la cible. FailedInvocations représente un échec permanent et peut être le résultat de mauvaises autorisations ou d'une mauvaise configuration de la cible.

Confirmer les autorisations appropriées dans la politique de ressources de la fonction Lambda

  1. Ouvrez la console AWS Lambda.
  2. Sélectionnez la fonction cible.
  3. Sélectionnez l'onglet Configuration, puis Permissions (Autorisations).
  4. Dans la section Resource-based policy (Politique basée sur les ressources), passez en revue le document de politique.

Voici un exemple de politique de ressources qui permet à EventBridge d'appeler la fonction 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"
}

Remarque : remplacez l'ARN par la région, l'ID de compte et le nom de ressource appropriés avant le déploiement.

Vous pouvez également utiliser l'API GetPolicy pour récupérer la politique de ressources de la fonction Lambda.

Si la politique de ressources existante ne contient pas les autorisations nécessaires, mettez-la à jour en utilisant les étapes précédentes comme référence. Vous pouvez également mettre à jour la politique à l'aide de la commande AddPermission dans l'AWS CLI. Voici un exemple de commande AddPermission :

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

Ajout d’une file d'attente de lettres mortes Amazon SQS à la cible

EventBridge utilise les files d’attente de lettres mortes (DLQ) Amazon Simple Queue Service (Amazon SQS) pour stocker les événements qui n'ont pas pu être transmis à une cible. Une DLQ SQS peut être jointe au rapport cible FailedInvocations. Il est possible de récupérer des événements à partir de la DLQ et de les analyser pour en savoir plus sur le problème. Une fois la correction terminée, les événements ayant échoué précédemment peuvent être renvoyés à la cible pour traitement.

  1. Ouvrez la règle appropriée dans la console EventBridge.
  2. Sous Targets (Cibles), sélectionnez Edit (Modifier), puis développez la section Additional settings (Paramètres supplémentaires).
  3. Sous Dead-letter queue (File d'attente de lettres mortes), sélectionnez Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (Sélectionner une file d'attente Amazon SQS dans le compte AWS actuel à utiliser comme file d'attente de lettres mortes).
  4. Sélectionnez une file d'attente SQS à utiliser comme DLQ.
  5. Une fois la DLQ attribuée, effectuez les étapes restantes de la section Edit Rule (Modifier la règle) pour enregistrer les modifications.