AWS Cloudwatch 事件规则 - 调用 Lambda - 带参数

问题描述 投票:0回答:3

我正在使用 AWS Clouwatch 事件规则调用基于 Cron Schedule 的 python lambda 函数,该函数运行良好。现在我可以使用 AWS Cloudformation 从 cloudwatch 甚至规则将参数传递到此 lambda 函数吗?可以请您指导一下吗? 请参阅下面我的 cfn 模板:

Step1 : parameter.Schedule=cron(0 21 ? * * *)

Step 2: "Schedule": {
            "Description": "Schedule for the Lambda function (cron or rate)",
            "Type": "String"
          },


Step 3:  "funcInvokeRule": {
            "Type": "AWS::Events::Rule",
            "Properties": {
                "ScheduleExpression": {"Ref": "Schedule"},
                "Targets": [{
                    "Id": "funcScheduler",
                    "Arn": {"Fn::GetAtt": ["Function","Arn"]}
                }]
            }
        },
amazon-web-services aws-lambda aws-cloudformation amazon-cloudwatch
3个回答
1
投票

Target
AWS::Events::Rule
属性类型有Input参数:

传递到目标的有效 JSON 文本。如果使用此属性,则事件文本本身中的任何内容都不会传递到目标。

还有 InputTransformer 您可以使用它来转换现有输入,例如向其添加额外的值。

使您能够根据某些事件数据向目标提供自定义输入的设置。您可以从事件中提取一个或多个键值对,然后使用该数据将自定义输入发送到目标。


1
投票

遵循 AWS 文档,您的 cloudformation 资源可以简单如下:

Resources:  
  EventRule:
    Type: AWS::Events::Rule
    Properties:
      Name: {EVENTNAME}
      Description: "ScheduledRule"
      ScheduleExpression: cron(0 21 ? * * *)
      State: "ENABLED"
      RoleArn: {ROLE}

NameRoleArn 替换为您自己的值。

注意:名称不是必需参数,但有助于识别您的资源。但是,根据文档,如果您替换 cloudformation 模板中的资源,则需要指定一个新名称。

如果您随后也打算使用 severless 对您的 lambda 使用 cloudformation,那么我个人会通过权限将规则附加到 lambda,这样您就可以在规则上附加最多 5 个触发器,而无需每次都修改规则目标。例如

  Lambda:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName:{LAMBDANAME}
      Description: {Description}
      Role: {Role}
      Handler: {FileName}.lambda_handler
      Runtime: {x}
      CodeUri: {ObjectPath}
      MemorySize: {x}
      Timeout: {x}
  Lambdatrigger:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref Lambda
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn: !Ref EventRule

0
投票

正如@Marcin 指出的,

Input
属性的
Targets
参数就是你想要的。请记住,格式是 JSON text,因此请确保您转义特殊字符。以下是使用您的 CloudFormation 资源的示例:

"funcInvokeRule": {
    "Type": "AWS::Events::Rule",
    "Properties": {
        "ScheduleExpression": {"Ref": "Schedule"},
        "Targets": [{
            "Id": "funcScheduler",
            "Arn": {"Fn::GetAtt": ["Function","Arn"]},
            "Input": "{\"foo\":\"val\",\"bar\":{\"baz\":\"nested_val\"}}"
        }]
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.