使用Terraform v0.11.3创建AWS ECS时目标组持续超时故障
咱来一步步拆解你遇到的这个ECS服务不健康、请求超时的问题——毕竟用Terraform 0.11.3搭单服务集群,踩坑大多集中在健康检查、网络配置或者服务本身的启动环节,下面几个方向你挨个排查:
1. 先核对目标组健康检查配置是否匹配服务实际情况
- 确认健康检查的核心参数:你服务用的是80端口,那目标组
tgqaphoenix-web的健康检查端口是不是设成了80?另外健康检查的路径也很关键——Phoenix应用默认的健康端点可能不是根路径/,如果你的服务有专门的健康检查接口(比如/health),得在Terraform的aws_lb_target_group配置里的health_check块中指定正确的path。 - 调整健康检查的阈值和超时:如果你的Phoenix服务启动较慢,Terraform里配置的
timeout(默认5秒)可能太短,导致健康检查请求超时;另外unhealthy_threshold和healthy_threshold也得适配服务启动速度,比如把不健康阈值调高到3-5次,避免刚启动就被标记为不健康。
2. 验证ECS任务与实例的网络配置是否正确
- 检查任务定义的端口映射:打开Terraform里的
aws_ecs_task_definition配置,确认container_definitions里的端口映射是不是"hostPort": 80, "containerPort": 80——要是写错了端口,目标组根本没法访问到容器。 - 安全组规则排查:ECS实例
i-079707fc669361a81的安全组必须允许来自ALB(如果用了的话)的80端口入站请求;同时ALB的安全组要允许外部访问80端口;另外还要确认容器内部有没有防火墙拦截80端口的请求。 - 网络模式适配:如果用的是
awsvpc网络模式,得确保任务配置了正确的子网和安全组,能和目标组正常通信;要是bridge模式,就得检查实例上的Docker网络配置有没有异常。
3. 查看日志定位服务启动故障
- 登录到ECS实例,用
docker logs <容器ID>查看Phoenix服务的启动日志——大概率能找到服务没法正常监听80端口的原因,比如依赖缺失、数据库连接失败、配置文件错误之类的。 - 检查ECS代理日志:实例上的
/var/log/ecs/ecs-agent.log会记录任务调度、启动的细节,看看有没有镜像拉取失败、资源不足、任务启动报错的信息。
4. 确认Terraform配置与实际资源的一致性
- 用
terraform plan对比本地配置和AWS实际资源状态,看看有没有配置变更没应用——比如你改了目标组的健康检查配置但没执行terraform apply,那实际资源还是旧的设置。 - 检查ALB监听规则:如果用了ALB,得确认
aws_lb_listener配置里是不是把80端口的请求正确转发到了目标组tgqaphoenix-web,别转发到了其他目标组或者没配置转发规则。
5. 手动测试连通性排除网络问题
- 在ECS实例本地测试:用
curl localhost:80或者telnet localhost 80,看看服务能不能正常响应——如果本地都访问不了,那肯定是容器内部的服务没启动好。 - 跨节点测试:从VPC内的其他机器(比如 bastion 主机)访问实例的80端口,要是访问不通,那就是子网路由、安全组或者网络ACL的问题。
内容的提问来源于stack exchange,提问作者Wes Eklund
相关产品推荐
相关产品推荐

