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

Dernière mise à jour : 03/12/2021

J'ai créé une règle Amazon EventBridge à l'aide de l'AWS Command Line Interface (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 à l'aide de la console EventBridge, les autorisations appropriées sont automatiquement ajoutées dans la politique de ressources de la fonction. Toutefois, lorsque la même règle est créée via l'AWS CLI, le kit SDK ou AWS CloudFormation, vous devez appliquer manuellement les autorisations dans la politique de ressources. Les autorisations permettent au service Amazon EventBridge d'accéder à la fonction Lambda pour l'invoquer.

Solution

Remarque : si vous recevez des messages d'erreurs lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), vérifiez que vous utilisez la version la plus récente de l'AWS CLI.

Passer en revue les métriques CloudWatch pour la règle EventBridge

  1. Ouvrez la console CloudWatch.
  2. Sélectionnez All Metrics (Toutes 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