为什么我使用 CloudFormation 模板或 AWS CLI 创建的 CloudWatch Events 规则无法调用 AWS Lambda?

1 分钟阅读
0

我使用 AWS CloudFormation(CloudFormation)模板或 AWS 命令行界面(AWS CLI)创建了 Amazon CloudWatch Events(CloudWatch Events)规则。我尝试调用 AWS Lambda 目标,但该目标未被调用。

简短描述

使用 CloudFormation 模板或 AWS CLI 创建的 CloudWatch Events 规则必须明确授予 CloudWatch Events 规则权限才能调用 Lambda 目标。

解决方法

您可以在 CloudFormation 模板或 AWS CLI 中添加调用 Lambda 目标所需的 CloudWatch Events 规则权限。

**注意:**如果在运行 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 CloudFormation 使用 AWS Lambda

AWS 官方
AWS 官方已更新 1 年前