You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署ECS Fargate服务超时:目标组注册IPv4错误

问题排查与解决:Fargate ECS请求超时及目标组附件报错

错误核心原因

你手动添加的aws_lb_target_group_attachment资源存在两个关键问题:

  1. 目标组target_type设为ip,要求target_id必须是ECS任务的私有IP地址,但你填入了ECS集群的ARN/ID,导致IP格式验证失败。
  2. 对于采用AWSVPC网络模式的Fargate ECS服务,完全不需要手动创建目标组附件——ECS服务会自动将运行中的任务IP注册到关联的目标组,手动添加的资源反而会引发冲突。

分步解决流程

1. 删除错误的目标组附件资源

直接移除这段代码:

resource "aws_lb_target_group_attachment" "websocket-server" {
  target_group_arn = aws_lb_target_group.websocket-server.arn
  target_id        = aws_ecs_cluster.websocket-server-cluster.id
  port             = 443
}

2. 确认ECS服务的负载均衡配置有效性

你的ECS服务中已经配置了load_balancer块,这部分是正确的,只需确认以下匹配项:

load_balancer {
  target_group_arn = aws_lb_target_group.websocket-server.arn
  container_name   = "websocket-server"
  container_port   = 443
}
  • container_name必须与任务定义中的容器名称完全一致(你的模块配置为websocket-server,符合要求)
  • container_port要匹配容器暴露的端口(容器端口设为443,符合要求)

3. 排查请求超时的其他潜在原因

移除错误资源后如果仍超时,检查以下配置:

  • 安全组规则:
    • 负载均衡安全组需允许80/443端口的入站流量(源可设为0.0.0.0/0或指定范围)
    • ECS任务安全组需允许负载均衡安全组访问443端口(入站规则)
    • 任务安全组需允许出站流量(用于拉取镜像、调用外部服务等)
  • 目标组健康检查:
    • 确认健康检查路径/apis/websocket-server/health确实返回200状态码
    • 检查健康检查的超时、间隔设置是否合理(当前timeout=10s、interval=100s,可根据服务响应速度调整)
  • 网络配置:
    • 任务assign_public_ip=true,若部署在私有子网,需确保子网关联NAT网关以拉取镜像
    • 负载均衡部署在公共子网,需确认子网路由表配置正确,能正常转发流量
  • 容器端口映射:
    确认任务定义的端口映射正确,AWSVPC模式下hostPort可设为0让系统自动分配,也可固定为443(只要容器确实监听该端口):
    port_mappings = [
      {
        containerPort = 443
        hostPort      = 443
        protocol      = "tcp"
      }
    ]
    

4. 验证资源创建顺序

虽然目标组已添加depends_on = [aws_lb.main],但需确保ECS服务依赖目标组和负载均衡,避免服务启动时目标组未就绪。

配置要点总结

  • 依赖ECS服务自动注册目标组,不要手动创建aws_lb_target_group_attachment
  • 确保安全组规则打通负载均衡与ECS任务的流量
  • 验证健康检查路径、容器端口的正确性
  • 确认网络子网、路由、公网访问配置满足任务运行需求

内容的提问来源于stack exchange,提问作者SebastianG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:57:36