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

3
我正在使用AWS Cloudwatch事件规则按Cron计划调用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"]}
                }]
            }
        },
2个回答

1
AWS::Events::RuleTarget 属性类型有 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替换为您自己的值。

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

如果您还要使用lambda using severless进行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

2
这个例子不起作用。原因:最后一行"SourceArn: !Ref EventRule"不会被CloudFormation部署。正如属性名称所暗示的那样,你需要ARN而不是规则ID。因此,请使用"SourceArn: !GetAtt EventRule.Arn"。 - proeben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接