AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

CloudFormation テンプレートまたは AWS CLI を使用して作成した CloudWatch イベントルールが AWS Lambda を呼び出せないのはなぜですか?

所要時間1分
0

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 の使用

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ