手动删除ECS资源后,如何强制执行cdk deploy跳过资源不存在错误?
解决CDK部署因手动删除ECS服务导致的NotFound错误问题
问题根源是CloudFormation栈的状态记录中仍存在已被手动删除的ECS服务资源,部署时CloudFormation尝试操作不存在的资源触发报错,无法直接忽略错误,需先同步状态,以下是可行方案:
方案一:通过CloudFormation控制台手动同步状态
- 登录AWS控制台,进入CloudFormation服务,找到目标栈
- 切换到「模板」标签,下载当前栈的CloudFormation模板
- 编辑模板,删除对应
AWS::ECS::Service的资源定义(匹配错误信息中ARN对应的资源) - 返回目标栈,选择「更新栈」,上传修改后的模板,完成更新操作
- 再次执行
cdk deploy,此时CDK本地定义与CloudFormation状态一致,可正常部署
方案二:使用CDK命令移除已不存在的资源记录
如果CDK代码中仍保留该ECS服务的定义,可执行以下命令:cdk destroy --exact <你的栈名>/<资源逻辑ID>其中资源逻辑ID对应错误信息中的
MyCdkStack-myService1Service54FA7D70(即ARN中service/之后到随机后缀前的部分)。执行后CDK会标记该资源为已删除,同步CloudFormation状态,之后即可正常执行cdk deploy。方案三:删除CDK代码中对应资源后修复状态
- 直接从CDK代码中移除该ECS服务的定义
- 执行
cdk synth生成最新模板 - 参考方案一的步骤,通过CloudFormation控制台更新栈,使用新生成的模板完成状态同步
- 最后执行
cdk deploy即可正常部署
内容的提问来源于stack exchange,提问作者Pankaj Jangid
相关产品推荐
相关产品推荐

