首页 > 解决方案 > 如何在 Amazon EventBridge / Amazon CloudWatch 中监控 Cloudformation 事件?

问题描述

如何在 Amazon EventBridge / Amazon CloudWatch 中监控 Cloudformation 事件?

我的方法是在成功创建特定 Cloudformation 堆栈后立即触发 lambda 事件。

因此我想声明一个事件规则 - 但我不清楚来源和事件细节?

  CreatePipelineRule:
    Type: AWS::Events::Rule
    Properties: 
      Description: "EventRule"
      EventPattern:
        source:
          - aws.???
        detail-type:
          - 'Cloudformation stack created event'
        detail:
          event:
              - ???          
      State: ENABLED

不幸的是,我找不到与此事件相关的文档。一般来说,事件模式描述为https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html

对于某些源,例如代码提交,生成的事件有据可查。例如代码提交:https ://docs.aws.amazon.com/codecommit/latest/userguide/monitoring-events.html 。

是否还有 Cloudformation 生成的事件列表?

标签: amazon-cloudformationamazon-cloudwatch

解决方案


我自己找不到任何文档,所以为了查看 CloudFormation 发送什么样的事件,我临时在 EventBridge 中创建了一个新的事件规则:

  • 从服务列表中选择Pre-defined pattern by service并选择CloudFormation
  • 选择CloudWatch log group作为目标以将所有事件打印到 CloudWatch

例如,当您创建一个新堆栈时,您会收到两个事件,其中sourceisaws.cloudformationdetails包含以下之一:

  • "eventName": "EstimateTemplateCost"
  • "eventName": "CreateStack"

或者当你删除一个堆栈时,你会得到:

  • "eventName": "DeleteStack"

问题是 CloudFormation 仅在您开始操作时发送事件,而不是在操作完成时发送事件(无论是成功时,还是回滚时)。因此,使用事件规则可能不是在创建堆栈时触发 Lambda 的方式。我建议改为查看自定义资源。在您的 CloudFormation 模板中包含一个以针对您的 Lambda 函数并使用DependsOn标签来确保它仅在其他所有内容都成功部署时运行。


推荐阅读