如何捕获CloudFormation堆栈的CREATE_COMPLETED事件并进行处理?

时间:2019-02-22 08:48:43

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

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

是否可以使用CloudWatchRule将此事件捕获到堆栈中?

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

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

鉴于此,Lambda将在每次资源更改时被调用,这并不能说明整个模板的状态。

1 个答案:

答案 0 :(得分: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'