如何使用CloudFormation将CloudWatch事件触发器添加到AWS Lambda?

3
我需要制作一个包含Lambda和CloudWatch事件的CloudFormation模板,以便定期触发它。以下是我的模板:
  CertPolicyLambda:
    Type: AWS::Serverless::Function
    Properties:
      Handler: cert-policy
      Runtime: go1.x
      CodeUri: s3://venafi-policy-sam/73b1ee5fab9f9f089838227389c27273
      Description: Venfi policy with a RESTful API endpoint using Amazon API Gateway.
      MemorySize: 512
      Timeout: 10
      Role:
        Fn::Sub: arn:aws:iam::${AWS::AccountId}:role/lambda-venafi-role
          S3_BUCKET: cert-policy-lambda
  ScheduledRule:
    Type: AWS::Events::Rule
    Properties:
      Description: ScheduledRule
      ScheduleExpression: rate(1 minute)
      State: ENABLED
      Targets:
      - Arn:
          Fn::Sub: ${CertPolicyLambda.Arn}
        Id:
          Ref: CertPolicyLambda
  PermissionForEventsToInvokeLambda:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName:
        Ref: CertPolicyLambda
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn:
        Fn::GetAtt:
        - CertPolicyLambda
        - Arn

这段代码创建了一个指向lambda的lambda和事件规则。enter image description here但它并没有在lambda本身中创建触发器。如果我手动添加触发器,它就可以正常工作。我做错了什么?
1个回答

3
在处理 AWS::Serverless::Function 资源时,您可以在资源属性中包含事件/触发器。
CertPolicyLambda:
  Type: 'AWS::Serverless::Function'
  Properties:
    Handler: cert-policy
    Runtime: go1.x
    CodeUri: s3://venafi-policy-sam/73b1ee5fab9f9f089838227389c27273
    ...
    Events:
      OneMinute: # Trigger every minute
        Type: Schedule
        Properties:
          Schedule: rate(1 minute)

CloudWatch事件调用您的函数的权限是自动处理的。


资源 Lambda 的属性验证失败,错误信息为:#: 多余的键 [Events] 不被允许 #/Role: 关键字 [pattern] 验证约束失败 <- 按照您的方法我遇到了这个错误,您知道为什么会出现这种情况吗? - Sithija Piyuman Thewa Hettige
@SithijaPiyumanThewaHettige 你在使用 AWS::Serverless::Function 还是 AWS::Lambda::Function - jogold
AWS::Lambda::Function - Sithija Piyuman Thewa Hettige
如答案所述,“Events” 仅适用于 AWS::Serverless::Function - jogold

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