AWS CloudFormation (CloudFormation) テンプレートまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して Amazon CloudWatch Events (CloudWatch Events) ルールを作成しました。AWS Lambda ターゲットを呼び出そうとしましたが、ターゲットが呼び出されませんでした。
簡単な説明
CloudFormation テンプレートまたは AWS CLI を使用して作成された CloudWatch イベントルールは、Lambda ターゲットを呼び出すためのアクセス権限を CloudWatch イベントルールに明示的に付与する必要があります。
解決方法
Lambda ターゲットを呼び出すために必要な CloudWatch イベントルールのアクセス権限を、CloudFormation テンプレートまたは AWS CLI に追加できます。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
オプション 1: CloudFormation テンプレートに権限を追加する
AWS:: Lambda:: Permission リソースを使用して、Lambda 関数のアクセスポリシーにポリシーステートメントを追加します。
重要: CloudFormation テンプレートでは、次のことを必ず行ってください。
- MyLambdaFunction を Lambda 関数の論理名に置き換えてください。
- MyEventRule をイベントルールの論理名に置き換えてください。
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"
オプション 2: AWS CLI を使用してアクセス権限を追加する
コマンドプロンプトで、次のコマンドを入力します。
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>"
関連情報
AWS Lambda と AWS CloudFormation の使用