【问题标题】:How can I catch CloudFormation stack CREATE_COMPLETED event and handle it?如何捕获 CloudFormation 堆栈 CREATE_COMPLETED 事件并进行处理?
【发布时间】:2019-07-16 07:39:39
【问题描述】:

我正在创建 CloudFormation 堆栈和我希望在堆栈创建完成后调用的 Lambda(堆栈获得 CREATE_COMPLETED 状态)。 Lambda 不是堆栈资源,但​​可以根据需要对其进行更改以实现结果。

是否可以使用 CloudWatchRule 为堆栈捕获此事件?

目前我能够捕捉堆栈资源创建事件,但不能捕捉堆栈创建本身。

类似的问题包括将 CloudFormationTemplate 订阅到 SNS 主题的方法,但是这会在每个堆栈资源状态更改时触发 SNS,而不是堆栈本身。

鉴于此,每次资源更改都会调用 Lambda,这不会说明整个模板的状态。

【问题讨论】:

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


【解决方案1】:

这是How to send SNS notification after cloud formation is completed?Is it possible to trigger a lambda on creation from CloudFormation template 的副本

CloudWatch 规则不是这里的解决方案,因为规则是由一组有限的服务或 API 调用触发的。 (请参阅此处的列表https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html

解决方案是将您的 Cloudformation 模板与 SNS 主题挂钩(请参阅此处的文档 https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)并将 SNS 链接到 Lambda 函数。

您将收到如下消息

StackId='arn:aws:cloudformation:eu-west-1:99999999999:stack/test/b08a8460-368c-11e9-be1f-025fe09a8a16'
Timestamp='2019-02-22T10:30:41.127Z'
EventId='e710f3c0-368c-11e9-b22d-06366d428b7a'
LogicalResourceId='test'
Namespace='486652066693'
PhysicalResourceId='arn:aws:cloudformation:eu-west-1:486652066693:stack/test/b08a8460-368c-11e9-be1f-025fe09a8a16'
PrincipalId='AID....6SK'
ResourceProperties='null'
ResourceStatus='CREATE_COMPLETE'
ResourceStatusReason=''
ResourceType='AWS::CloudFormation::Stack'
StackName='test'
ClientRequestToken='Console-CreateStack-c305c793-9a83-b175-bd26-f251aee30adc' 

【讨论】:

  • 我理解提出的方法,但是当堆栈订阅 SNS 主题时,SNS 会为每个堆栈资源事件触发,但不会针对堆栈本身。我正在为每个堆栈资源调用 Lambda,并且永远不会获取堆栈自身完成的事件。
  • 你是对的 - 堆栈本身的状态不会触发通知 - 我的答案顶部列出的其他答案解决了这个问题。例如:在您的模板中创建一个 lambda 函数,使用正确的 dependsOn 属性以确保它是最后创建的,并在 CREATE_COMPLETE 资源通知上调用它。所有这些都是hacky解决方法,这并不优雅。你为什么要这样做?最后可能有更好的方法来触发代码?
  • 感谢您的关注。我这样做是因为我希望其他人使用他们的工具(如 slack)收到堆栈完成的通知。必须通知他们堆栈输出,以便他们可以开始使用堆栈资源并了解凭据/ip/etc
猜你喜欢
  • 2019-11-27
  • 2016-04-19
  • 2014-11-05
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多