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

时间:2020-04-14 21:31:21

标签: amazon-web-services aws-lambda amazon-cloudformation amazon-cloudwatch

我正在使用AWS Clouwatch Event Rule调用基于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"]}
                }]
            }
        },

2 个答案:

答案 0 :(得分:1)

AWS docs之后,您的cloudformation资源可能很简单:

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

用您自己的值替换名称 RoleArn

注意:名称不是必需的参数,但确实有助于标识您的资源。但是,根据文档,如果您替换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

答案 1 :(得分:0)

Target的{​​{1}}属性类型具有Input参数:

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

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

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