【问题标题】:AWS Cloudwatch Event Rule - Invoke Lambda - with ParameterAWS Cloudwatch 事件规则 - 调用 Lambda - 带参数
【发布时间】:2020-07-27 18:20:20
【问题描述】:

我正在使用 AWS Clouwatch 事件规则来调用基于 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"]}
                }]
            }
        },

【问题讨论】:

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


    【解决方案1】:

    AWS::Events::RuleTarget 属性类型有Input 参数:

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

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

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

    【讨论】:

      【解决方案2】:

      按照AWS docs,您的cloudformation 资源可以很简单:

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

      NameRoleArn 替换为您自己的值。

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

      【讨论】:

      • 这个例子不起作用。原因:最后一行“SourceArn: !Ref EventRule”不会被cloudformation部署。正如属性名称所暗示的,您需要的是 ARN,而不是规则 ID。所以使用“SourceArn: !GetAtt EventRule.Arn”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 2020-09-20
      • 2017-11-01
      相关资源
      最近更新 更多