Terraform部署AWS ECS Fargate遇504/503错误,求排查方法
ECS Fargate部署Express应用失败的排查方向
1. 容器镜像与启动验证
- 确认ECR镜像状态:检查
prod-ecr-repo仓库中是否存在正确的镜像,确保镜像已成功推送,且任务定义中使用的镜像标签(默认latest)与推送的一致。 - 验证任务执行角色权限:虽然已附加
AmazonECSTaskExecutionRolePolicy,但确认该策略包含ecr:GetDownloadUrlForLayer、ecr:BatchGetImage等拉取镜像的必要权限,避免因权限不足导致镜像拉取失败。 - 查看容器启动日志:在任务定义中添加
logConfiguration(比如awslogs驱动),通过CloudWatch Logs查看容器启动时的具体报错,比如依赖缺失、index.js路径错误、应用未正确监听端口等。 - 确认应用监听地址:确保Express应用监听在
0.0.0.0:5000,而非127.0.0.1,否则容器外部无法访问服务。
2. 负载均衡与目标组配置修正
- 修正目标组端口配置:当前目标组监听
80端口,但容器实际暴露5000端口,端口不匹配会直接导致健康检查失败。需将目标组的port修改为5000,确保与容器端口一致。 - 查看目标组健康状态:在EC2控制台目标组页面,检查Fargate任务IP的健康状态,查看失败原因(如连接拒绝、超时),这能直接反映服务是否正常响应。
- 确认负载均衡转发规则:当前Listener将
80端口流量转发到目标组的80端口,需确保目标组端口修正后,转发路径能正确到达容器的5000端口。
3. 网络与安全组排查
- 检查安全组流量规则:确认
service_security_group允许来自负载均衡安全组的5000端口流量,同时负载均衡安全组的出站规则允许访问该端口(当前负载均衡egress为0.0.0.0/0,基本没问题,但需确认)。 - 验证VPC子网配置:确认默认VPC的子网开启了DNS解析和DNS主机名,Fargate任务需要这些配置来正常拉取ECR镜像。
- 检查任务网络连通性:虽然设置了
assign_public_ip = true,但确认任务能正常访问外部网络(如拉取镜像时的ECR服务)。
4. ECS任务与服务事件分析
- 查看服务事件日志:在ECS控制台服务的“事件”标签下,查看具体的部署失败事件详情,通常会包含资源不足、任务定义错误、角色权限问题等明确提示。
- 验证任务定义参数:确认任务定义中的
memory(512)和cpu(256)符合Fargate的规格要求,容器配置的内存未超过任务总内存限制。 - 调整服务部署策略:因健康检查失败导致服务不断重启任务,需先解决核心问题(如端口不匹配),才能终止失败循环。
内容的提问来源于stack exchange,提问作者Bowis
相关产品推荐
相关产品推荐

