CDK Java项目构建CFT栈部署后WaitCondition配置失败触发回滚问题
问题根因
你遇到的回滚是MasterNodeWaitCondition收到了EC2实例主动发送的失败信号导致的,所有资源显示CREATE_COMPLETE仅代表AWS侧资源创建完成,不代表EC2实例内部的初始化配置逻辑执行成功。你用到的WaitCondition相关模板如下:
MasterNodeWaitHandle: Type: AWS::CloudFormation::WaitConditionHandle Metadata: aws:cdk:path: CdkStack/MasterNodeWaitHandle MasterNodeWaitCondition: Type: AWS::CloudFormation::WaitCondition Properties: Handle: Ref: MasterNodeWaitHandle Timeout: "18000" DependsOn: - renderingserver1 Metadata: aws:cdk:path: CdkStack/MasterNodeWaitCondition
这个WaitCondition依赖的renderingserver1就是报错信息里ID为i-07f7991f7bf96d427的EC2实例,实例内部配置脚本执行失败后调用cfn-signal发送了失败通知,触发了栈回滚。
排查解决步骤
- 复现问题时禁用自动回滚:重新部署栈时添加
--disable-rollback参数,配置失败后栈不会直接删除所有资源,保留EC2实例供日志排查 - 查看EC2实例内部日志:登录实例后查看
/var/log/cloud-init.log和/var/log/cloud-init-output.log,搜索错误信息即可定位配置失败的具体原因,常见问题包括依赖安装失败、配置文件格式错误、权限不足、内部服务连接失败等 - 检查网络与权限配置:确认实例所属安全组放开了CloudFormation服务的出站访问权限,私有子网部署的实例需要配置NAT网关或CloudFormation VPC端点,实例关联的IAM角色需包含
cloudformation:SignalResource权限 - 核对CDK逻辑:检查Java CDK中UserData部分的代码,确认
cfn-signal命令的触发逻辑正确,仅在所有配置步骤执行成功后发送成功信号,避免中间步骤出错后仍发送成功信号的逻辑错误
内容的提问来源于stack exchange,提问作者ragu
相关产品推荐
相关产品推荐

