AWS ECS Service创建失败排查:新VPC部署下的配置问题
排查ECS Service创建失败的具体步骤
1. 先抓CloudFormation的精准错误日志
直接去CloudFormation控制台找到你的测试栈,查看「事件」标签,定位到ECS Service资源的失败条目,把完整错误信息扒出来。这是最快定位问题的方式,常见报错包括:
Unable to assume role:哪怕权限和生产一致,新角色的信任策略可能没配对,或者加了生产没有的权限边界No container instance found:EC2类型集群的话,新VPC里的实例没注册到集群;Fargate的话子网/安全组配置有问题Subnet has no internet access:任务拉取镜像需要联网,新VPC的私网子网没配NAT网关,或者公网子网没开自动分配公网IP
2. 核对IAM角色的权限细节
- 检查ECS Service用的任务执行角色和任务角色:
- 确认信任策略包含
ecs-tasks.amazonaws.com,新创建的角色容易漏这个 - 和生产角色逐行对比权限,重点看镜像拉取(
ecr:GetDownloadUrlForLayer、ecr:BatchGetImage等)、日志推送(logs:CreateLogStream、logs:PutLogEvents)相关权限 - 检查是否有权限边界限制,新角色可能被附加了生产没有的边界规则
- 确认信任策略包含
3. 排查新VPC的网络配置
- 子网层面:
- Fargate类型的话,确认子网AZ和模板指定一致,公网子网要开
MapPublicIpOnLaunch,私网子网必须搭配NAT网关 - 查路由表:私网子网路由要指向NAT网关,公网子网指向互联网网关,确保任务能连到ECR
- Fargate类型的话,确认子网AZ和模板指定一致,公网子网要开
- 安全组层面:
- 确认Service的安全组允许出站流量到互联网(或VPC端点,如果用VPC端点访问ECR/S3)
- 安全组是否放行任务和依赖资源(比如数据库)的通信端口
4. 验证任务定义的有效性
- 去ECS控制台手动注册这个任务定义,看是否报错——如果注册失败,问题出在任务定义本身
- 确认镜像地址正确,ECR里的镜像存在,且任务执行角色有拉取该镜像的权限
- 检查任务的CPU/内存配置是否符合集群要求(Fargate的话必须用官方指定的CPU-内存组合)
5. 检查ECS集群状态
- 要是用的EC2类型集群,确认新VPC里的EC2实例已经成功注册到集群,且实例状态正常(去ECS控制台「集群>实例」里看)
- 实例绑定的
ecsInstanceRole权限是否完整,比如要有ecs:RegisterContainerInstance、ecs:DeregisterContainerInstance等权限
6. 核对CloudFormation模板的参数和依赖
- 确认ECS Service的
Cluster参数指向的是新VPC对应的测试集群,不是生产集群 - 检查Service依赖的负载均衡器、目标组等资源:哪怕这些资源创建成功,也可能存在端口不匹配、目标组健康检查配置错误等问题,导致Service无法注册
内容的提问来源于stack exchange,提问作者George Udosen
相关产品推荐
相关产品推荐

