AWS CDK部署CodePipeline堆栈反复报ROLLBACK_COMPLETE错误如何解决
核心错误根因定位步骤
你当前看到的ROLLBACK_COMPLETE只是CloudFormation堆栈部署失败后的最终状态,不是具体错误原因,请先按照以下步骤获取真实报错:
- 登录AWS控制台,切换到
us-east-2区域 - 进入CloudFormation服务页,找到部署失败的对应堆栈
- 点击「事件」标签,按时间倒序查找第一条状态为
FAILED的事件,该事件的错误描述即为部署失败的根本原因
现有代码与配置的常见问题排查
1. 硬编码资源名称冲突
你在pipeline_stack.py中写死了流水线名称:
pipeline = pipelines.CodePipeline(self, "UsamaPipeline", pipeline_name = "UsamaPipeline", synth = synth)
即使你更换了CloudFormation堆栈名称,只要CodePipeline服务中还存在名为UsamaPipeline的遗留资源,新堆栈创建时就会因为资源重名触发回滚。请先到CodePipeline控制台删除对应遗留流水线。
2. 目录结构不匹配
你Synth步骤的路径配置严格依赖GitHub仓库的目录结构:
commands = ["cd UsamaAndromedaSkipQ/infra", "pip install -r requirements.txt", "npm install -g aws-cdk", "cdk synth"], primary_output_directory = "UsamaAndromedaSkipQ/infra/cdk.out"
请确认你的GitHub仓库根目录下存在UsamaAndromedaSkipQ/infra路径,且该路径下存放了完整的CDK项目文件(包括requirements.txt、app.py、cdk.json等),路径不匹配会直接导致Synth步骤执行失败。
3. 密钥与权限问题
请验证以下配置是否正确:
us-east-2区域的Secrets Manager中存在名为usama_secret的密钥,且密钥中存在github_access字段,对应的值是有目标GitHub仓库读取权限的个人访问令牌- 你部署CDK使用的IAM身份(Cloud9的实例角色)拥有
secretsmanager:GetSecretValue权限 - 目标AWS账号
315997497220的us-east-2区域已经完成CDK Bootstrap,且Bootstrap版本与你使用的CDK版本匹配
4. CDK版本不匹配
你在Synth步骤中全局安装最新版CDK:npm install -g aws-cdk,如果你的Cloud9本地环境、requirements.txt中依赖的CDK包版本与全局安装的版本不一致,会导致Synth产物格式错误,触发部署失败。建议固定CDK版本:
本地、requirements.txt、Synth步骤安装的CDK版本保持一致,比如都指定为v2.80.0:npm install -g aws-cdk@2.80.0,同时requirements.txt中对应的aws-cdk包也指定相同版本。
5. 依赖缺失
检查UsamaAndromedaSkipQ/infra/requirements.txt中是否包含所有用到的依赖包,至少需要包含:
aws-cdk.core aws-cdk.pipelines aws-cdk.aws-codepipeline-actions
缺失依赖会导致cdk synth执行失败。
内容的提问来源于stack exchange,提问作者Usama Ali

