使用启动模板的ASG创建/更新策略下CloudFormation信号机制是否故障?
1. 检查ASG实例是否被自动替换
首先登录AWS控制台进入对应ASG的「实例」标签页,确认你发送信号的实例ID是否仍然处于InService生命周期状态:
- 如果实例状态为
Terminating/Terminated,说明ASG的健康检查未通过,实例被自动替换,你发送的是已废弃实例的信号,CloudFormation仍在等待新启动实例的信号,自然不会流转状态。 - 若ASG配置的是ELB健康检查,需要确认实例所在的目标组健康检查规则配置正确,且实例安全组已放行健康检查端口的入站流量。
2. 确认信号的匹配对象正确
你手动执行cfn-signal返回的错误信息中提到的<INSTANCE_ID>,需要和ASG中当前运行的实例ID完全一致:
- 若二者不匹配,说明你执行的
cfn-signal命令默认读取的实例ID有误,可手动指定ID参数:cfn-signal --id <当前实例ID> --resource <ASG逻辑ID> --stack <栈名> --region <区域>
3. 修正CreationPolicy的语法问题
你提供的CreationPolicy配置中MinSuccessfulInstancesPercent属性末尾多了一个多余的逗号,JSON格式下多余的后置逗号可能导致CloudFormation解析策略异常,建议删除后重新测试:
"CreationPolicy" : { "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" : 100 }, "ResourceSignal" : { "Count" : 1, "Timeout" : "PT10M" } }
4. 检查嵌套栈场景的栈名配置
如果你使用的是嵌套栈,需要确认cfn-signal命令中传入的--stack参数是嵌套栈的名称,而非父栈名称,否则信号会发送到父栈的资源上下文,无法被嵌套栈的ASG资源识别。
5. 确认CloudFormation已收到有效信号
在CloudTrail控制台搜索SignalResource事件,核对事件的请求参数:
RequestParameters.uniqueId为当前运行的实例IDRequestParameters.resourceName为ASG的逻辑IDRequestParameters.status为SUCCESS
如果存在符合条件的事件,但CloudFormation栈事件中无「收到SUCCESS信号」的对应记录,可提交AWS支持工单排查后台状态流转异常问题。
内容的提问来源于stack exchange,提问作者bomb-omb
相关产品推荐
相关产品推荐

