首页 > 解决方案 > 如何捕获 CloudFormation 堆栈 CREATE_COMPLETED 事件并进行处理?

问题描述

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

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

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

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

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

标签: amazon-web-servicesaws-lambdaamazon-cloudformationamazon-cloudwatch

解决方案


这是云形成完成后如何发送 SNS 通知的副本?是否可以在从 CloudFormation 模板创建时触发lambda

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' 

推荐阅读