Passer au contenu

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

Lecture de 4 minute(s)
0

Je souhaite déterminer pourquoi la règle Amazon EventBridge que j'ai créée n'invoque pas ma fonction AWS Lambda.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

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

Procédez comme suit :

  1. Ouvrez la console CloudWatch.
  2. Dans le volet de navigation, sous Métriques, sélectionnez Toutes les métriques.
  3. Sélectionnez l'espace de noms AWS/Événements.
  4. Choisissez les métriques TriggeredRules, Invocations et FailedInvocations pour la règle. Si nécessaire, vous pouvez consulter les métriques à l'aide de la statistique SUM.
    Remarque : Si les métriques incluent les points de données FailedInvocations, la règle n'a peut-être pas réussi à invoquer la cible. Pour plus d'informations, consultez la section Métriques d'EventBridge.

Vérifier que la politique de ressources de la fonction Lambda dispose des autorisations appropriées

Lorsque vous utilisez la console EventBridge pour créer une règle, la console ajoute automatiquement les autorisations appropriées à la politique basée sur les ressources de la fonction. Lorsque vous utilisez l'interface de ligne de commande AWS, le SDK AWS ou AWS CloudFormation pour créer une règle, vous devez ajouter manuellement les autorisations dans la politique basée sur les ressources. Les autorisations accordent au service EventBridge l'accès nécessaire pour pouvoir invoquer la fonction Lambda.

Examiner les autorisations associées à la fonction Lambda cible

Procédez comme suit :

  1. Ouvrez la console Lambda.
  2. Choisissez la fonction Lambda cible.
  3. Sélectionnez l'onglet Configuration, puis choisissez Autorisations.
  4. Dans la section Politique basée sur les ressources, consultez le document de politique.
    Remarque : Ou, pour récupérer la politique de ressources de la fonction Lambda, utilisez l’API GetPolicy ou la commande AWS CLI get-policy avec les entrées appropriées.

L'exemple de politique de ressources suivant permet à EventBridge d'invoquer 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 Ressource par la fonction Lambda ARN et SourceArn par la règle ARN.

Mettre à jour la politique de ressources

Procédez comme suit :

  1. Ouvrez la console Lambda.
  2. Choisissez la fonction Lambda cible.
  3. Sélectionnez l'onglet Configuration, puis sélectionnez Autorisations.
  4. Dans la section Politique basée sur les ressources, choisissez Ajouter des autorisations.
  5. Choisissez Service AWS - EventBridge.
  6. Indiquez l’ID d’instruction comme identifiant facultatif pour votre déclaration de politique.
  7. Dans Principal, utilisez events.amazonaws.com.
  8. Fournissez l'ARN source en tant qu'ARN de la règle EventBridge.
  9. Dans Action, sélectionnez Lambda:InvokeFunction dans la liste déroulante.
  10. Sélectionnez Enregistrer.

Pour mettre à jour la politique, vous pouvez également utiliser l'API AddPermission. Vous pouvez également exécuter la commande de l'interface de ligne de commande AWS add-permission comme dans l'exemple suivant :

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

Ajouter un DLQ à la cible sur Amazon SQS

EventBridge utilise des files d'attente de lettres mortes (DLQ) sur Amazon Simple Queue Service (Amazon SQS) pour stocker les événements qui n'ont pas pu être transmis à une cible. Associez un DLQ SQS à la cible qui signale FailedInvocations. Pour obtenir un contexte plus détaillé sur le problème, vous pouvez récupérer les événements du DLQ. Les événements ayant échoué peuvent être renvoyés à nouveau à la cible en vue d’être traités.

Procédez comme suit :

  1. Ouvrez la règle correspondante dans la console EventBridge.
  2. Sous Cibles, sélectionnez Modifier, puis développez la section Paramètres supplémentaires.
  3. Sous File d'attente de lettres mortes, choisissez Sélectionnez une file d'attente Amazon SQS du compte AWS actuel à utiliser comme file d'attente de lettres mortes.
  4. Choisissez une file d'attente SQS à utiliser comme DLQ.
  5. Après avoir attribué le DLQ, vérifiez et enregistrez vos modifications.

Informations connexes

Ma règle s'est exécutée mais ma fonction Lambda n'a pas été invoquée

Autorisations AWS Lambda

Utiliser des files d'attente de lettres mortes pour traiter les événements non diffusés dans EventBridge

Amélioration de la reprise après échec pour Amazon EventBridge