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