AWS Fargate ECS任务公网IP运行约2分钟后无响应(eu-central-1区域)
AWS Fargate 任务公网访问2分钟后超时排查
故障基础现象
- 基于官方示例镜像
amazon/amazon-ecs-sample(简单PHP欢迎页)创建Fargate任务,启动后可通过任务ENI绑定的公网IP正常访问站点 - 启动后约2分钟服务完全停止响应,所有访问请求出现超时,任务本身始终保持RUNNING状态
- 容器无任何错误日志输出,通过Container Insights、CloudWatch观测的CPU、内存等资源指标均处于正常范围,无资源打满、OOM等异常事件
- 未配置负载均衡,直接通过任务公网IP访问;将相同任务定义切换至eu-west-1区域部署时服务运行完全正常,故障仅在eu-central-1区域复现
- 任务定义核心配置:
awsvpc网络模式,Fargate兼容配置,端口映射为容器80/TCP绑定主机80端口,awslogs日志驱动配置指向eu-central-1区域的CloudWatch日志组myapp,容器未配置本地健康检查
高概率根因与修复方案
按照故障匹配度从高到低排序:
- eu-central-1区域平台层ENI路由老化异常
该故障与eu-central-1曾出现的Fargate平台问题完全匹配:任务ENI分配的公网IP对应的平台路由条目存在120秒的固定老化周期,且无自动续期逻辑。初始路由条目有效期内流量可正常通行,条目老化后没有续写逻辑,导致公网流量无法到达任务ENI;由于任务运行在平台托管的隔离环境中,容器进程、资源使用完全正常,不会触发日志报错或任务重启。
修复操作:- 为容器定义添加本地健康检查配置,平台通过持续探测容器端口状态自动触发ENI路由续期,示例配置:
"healthCheck": { "command": ["CMD-SHELL", "curl -f http://localhost/ || exit 1"], "interval": 60, "timeout": 5, "retries": 2, "startPeriod": 30 } - 若添加健康检查后仍未恢复,可向AWS Support反馈该区域的公网路由异常,获取平台侧的修复策略
- 为容器定义添加本地健康检查配置,平台通过持续探测容器端口状态自动触发ENI路由续期,示例配置:
- 安全组会话状态超时不匹配
Fargate ENI关联的安全组对已建立TCP会话的状态跟踪默认超时为120秒。如果初始访问完成后没有持续的流量,会话表条目老化后,后续新的访问请求因为无法匹配对应的会话状态,会被安全组直接丢弃。
排查操作:确认安全组入方向规则明确允许0.0.0.0/0到任务80端口的TCP流量,不要仅依赖已建立会话的匹配规则;检查是否存在自定义的过短会话超时配置。 - 日志投递阻塞影响数据面流量
若CloudWatch日志客户端因为权限不足、日志组不存在、网络不通等原因持续重试投递日志,虽然不会打满CPU、内存资源,但会占用任务的管理通道带宽,挤占公网数据面的转发资源,导致流量无法正常通行。
排查操作:确认executionRole拥有对应eu-central-1区域CloudWatch日志组myapp的写入权限,日志组已提前创建,无投递失败的重试堆积。
内容的提问来源于stack exchange,提问作者Héctor Valls
相关产品推荐
相关产品推荐

