為什麼我使用 CloudFormation 範本或 AWS CLI 建立的 CloudWatch Events 規則無法叫用 AWS Lambda?

1 分的閱讀內容
0

我使用 AWS CloudFormation (CloudFormation) 範本或 AWS Command Line Interface (AWS CLI) 建立了 Amazon CloudWatch Events (CloudWatch Events) 規則。我試圖叫用 AWS Lambda 目標,但目標並未叫用。

簡短描述

使用 CloudFormation 範本或 AWS CLI 建立的 CloudWatch Events 規則必須明確授予 CloudWatch Events 規則許可,才能叫用 Lambda 目標。

解決方案

您可以在 CloudFormation 範本或 AWS CLI 中新增需要的 CloudWatch Events 規則許可,以叫用 Lambda 目標。

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

選項 1:在 CloudFormation 範本中新增許可

使用 AWS:: Lambda:: 許可資源,將政策聲明新增至 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 官方已更新 1 年前