AWS CodePipeline部署至ECS持续卡在进行中,如何排查解决?
排查CodePipeline部署ECS卡住的问题
以下是常见的问题原因及修复步骤:
1. 检查imagedefinitions.json格式与内容
CodePipeline部署ECS完全依赖该文件定位镜像,格式或内容错误会直接导致部署停滞:
- 确保文件为标准JSON结构,示例正确格式:
[ { "name": "你的ECS容器名称", "imageUri": "1111111111.dkr.ecr.eu-west-2.amazonaws.com/node-api:latest" } ] name字段必须与ECS服务任务定义中的容器名称完全匹配(大小写敏感)- 验证
imageUri的准确性,包括ECR仓库ID、区域、镜像名及标签 - 通过CodeBuild构建日志或S3工件桶,确认该文件已正确生成并包含在构建输出中
2. 验证CodePipeline部署角色权限
CodePipeline的服务角色需要足够权限完成ECS服务更新:
- 进入IAM控制台,找到CodePipeline使用的服务角色
- 确保角色附加
AmazonECSDeployRolePolicy托管策略,或自定义策略包含以下核心权限:ecs:UpdateServiceecs:DescribeServicesiam:PassRole(用于传递ECS任务执行角色)
3. 排查ECS服务本身的部署障碍
部署卡住大多是ECS服务无法完成任务更新流程:
- 进入ECS集群的服务详情页,查看事件标签,是否有任务启动失败、镜像拉取错误等日志
- 检查任务标签,查看新任务的状态:
- 若任务启动失败,查看任务详情的「停止原因」,常见问题包括:
- ECR镜像拉取权限不足(确认任务执行角色拥有
ecr:GetDownloadUrlForLayer、ecr:BatchGetImage权限) - Fargate资源配额不足(CPU/内存配置超出可用额度)
- VPC子网/安全组配置错误(无法访问ECR或负载均衡器)
- ECR镜像拉取权限不足(确认任务执行角色拥有
- 若任务启动失败,查看任务详情的「停止原因」,常见问题包括:
- 调整服务的部署配置:
若最小健康百分比设为100%、最大百分比设为100%,会导致无法启动新任务替换旧任务,建议调整为最小50%、最大200%
4. 确认CodePipeline部署阶段配置
- 检查部署阶段指定的集群名称、服务名称是否与实际ECS资源完全一致(大小写敏感)
- 确认
imagedefinitions.json的文件名和路径正确,若文件在构建输出的子目录中,需填写相对路径(如build/imagedefinitions.json)
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

