使用Terraform将ECS关联负载均衡目标组时target_id参数取值疑问
核心问题说明
你不需要单独创建aws_lb_target_group_attachment资源关联ECS服务与负载均衡目标组,该资源仅适用于注册固定生命周期的目标(比如静态EC2实例、固定IP的资源)。ECS托管的容器会随任务重启、服务扩缩容频繁变动,没有固定的target_id可以提前配置,你在控制台自然找不到对应的静态ID。
正确配置方案
直接在aws_ecs_service资源的load_balancer内嵌块中指定目标组即可,ECS控制面会自动完成容器的动态注册、注销逻辑,无需手动管理:
resource "aws_ecs_service" "your_service" { name = "your-ecs-service-name" cluster = aws_ecs_cluster.your_cluster.id task_definition = aws_ecs_task_definition.your_task_def.arn desired_count = 3 # 负载均衡关联配置 load_balancer { target_group_arn = aws_lb_target_group.your_tg.arn # 你的目标组ARN container_name = "app-container" # 必须和任务定义中对应的容器名称完全一致 container_port = 8080 # 容器暴露的服务端口 } # 其他ECS服务配置(网络模式、容量提供商策略等)按实际需求补充 }
非常规场景手动注册说明
如果你部署的是不受ECS服务管理的独立运行ECS任务,确实需要手动注册到目标组的话,target_id按以下规则取值:
- Fargate启动类型的任务:取任务关联的弹性网卡(ENI)的私有IP地址
- EC2启动类型的任务:取EC2宿主机的实例ID,同时需要在
aws_lb_target_group_attachment中填写port参数,值为容器端口映射到宿主机的端口
内容的提问来源于stack exchange,提问作者Anton Cavanaugh
相关产品推荐
相关产品推荐

