Pourquoi la règle CloudWatch Events que j'ai créée à l'aide de modèles CloudFormation ou de l'AWS CLI ne parvient-elle pas à appeler AWS Lambda ?

Lecture de 2 minute(s)
0

J'ai créé une règle Amazon CloudWatch Events (CloudWatch Events) à l'aide de modèles AWS CloudFormation (CloudFormation) ou de l'interface de ligne de commande AWS (AWS CLI). J'ai essayé d'appeler une cible AWS Lambda, mais la cible n'a pas été invoquée.

Brève description

La règle CloudWatch Events créée à l'aide de modèles CloudFormation ou de l'AWS CLI doit explicitement autoriser la règle CloudWatch Events à invoquer la cible Lambda.

Résolution

Vous pouvez ajouter les autorisations de règle CloudWatch Events requises pour appeler votre cible Lambda dans le modèle CloudFormation ou dans l'AWS CLI.

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

Option 1 : ajouter des autorisations dans le modèle CloudFormation

Utilisez la ressource AWS::Lambda::Permission pour ajouter une déclaration de politique à la stratégie d'accès de votre fonction Lambda.

Important : Dans le modèle CloudFormation, veillez à :

  • Remplacez MyLambdaFunction par le nom logique de votre fonction Lambda.
  • Remplacez MyEventRule par le nom logique de la règle d'événement.

JSON

"LambdaInvokePermission":
{
  "Type": "AWS::Lambda::Permission",
  "Properties": {
    "FunctionName": {
      "Fn::GetAtt": [
        "MyLambdaFunction",
        "Arn"
      ]
    },
    "Action": "lambda:InvokeFunction",
    "Principal": "events.amazonaws.com",
    "SourceArn": {
      "Fn::GetAtt": [
        "EventRule",
        "Arn"
      ]
    }
  }
}

YAML

LambdaInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName:
      Fn::GetAtt:
        - MyLambdaFunction
        - Arn
    Action: "lambda:InvokeFunction"
    Principal: "events.amazonaws.com"
    SourceArn:
      Fn::GetAtt:
        - "EventRule"
        - "Arn"

Option 2 : Ajouter des autorisations à l'aide de AWS CLI

Saisissez ce qui suit à l'aide d'une invite de commande.

aws lambda add-permission
--statement-id "TrustCloudWatchToInvokeMyLambdaFunction" \
--action "lambda:InvokeFunction" \
--principal "events.amazonaws.com" \
--function-name "arn:aws:lambda:<region>:<account-id>:function:<function-name>"
\
--source-arn "arn:aws:events:<region>:<account-id>:rule/<rule-name>"

Informations connexes

Utilisation d'AWS Lambda avec AWS CloudFormation

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an
Aucun commentaire