Terraform配置ECS关联ALB目标组报错及解决方案咨询
Terraform配置AWS ECS关联ALB问题解决
问题概述
- 配置
aws_ecs_service的load_balancer块时,使用target_group_arns参数报错,提示需改用target_group_arn - 改用
target_group_arn后,引用module.alb.target_groups[0]报错,提示该模块无target_groups属性
原配置与报错信息
初始ECS服务配置
resource "aws_ecs_service" "nodejs-service" { name = "nodejs-service" cluster = aws_ecs_cluster.project_cluster.id task_definition = aws_ecs_task_definition.nodejs.arn launch_type = "FARGATE" desired_count = 1 load_balancer { target_group_arns = module.alb.target_group_arns container_name = "${aws_ecs_task_definition.nodejs.family}" container_port = 8080 # Specifying the container port } network_configuration { subnets = var.vpc.public_subnets assign_public_ip = true } }
ALB模块配置
module "alb" { source = "terraform-aws-modules/alb/aws" version = "~> 8.0" name = var.namespace load_balancer_type = "application" vpc_id = var.vpc.vpc_id subnets = var.vpc.public_subnets security_groups = [var.sg.lb] http_tcp_listeners = [ { port = 80 protocol = "HTTP" target_group_index = 0 } ] target_groups = [ { name_prefix = "nodejs-service" backend_protocol = "HTTP" backend_port = 8080 target_type = "instance" } ] }
报错信息1
│ Error: Unsupported argument │ │ on modules/ecs/main.tf line 58, in resource "aws_ecs_service" "nodejs-service": │ 58: target_group_arns = module.alb.target_group_arns │ │ An argument named "target_group_arns" is not expected here. Did you mean "target_group_arn"?
修改后的配置片段
load_balancer { target_group_arn = module.alb.target_groups[0] container_name = "${aws_ecs_task_definition.nodejs.family}" container_port = 8080 # Specifying the container port }
报错信息2
│ Error: Unsupported attribute │ │ on modules/ecs/main.tf line 58, in resource "aws_ecs_service" "nodejs-service": 58: target_group_arn = module.alb.target_groups[0] ├──────────────── │ module.alb is a object This object does not have an attribute named "target_groups".
Terraform版本要求
terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = ">= 4.27" } null = { source = "hashicorp/null" version = ">= 2.0" } } }
解决方案
- 修正ECS负载均衡参数:
aws_ecs_service的load_balancer块仅支持target_group_arn(单个目标组ARN),若需关联多个目标组,需添加多个load_balancer块。 - 正确引用ALB模块输出:terraform-aws-modules/alb/aws 8.x版本的输出属性中,目标组ARN的列表为
target_group_arns,因此引用第一个目标组ARN应使用module.alb.target_group_arns[0]。
修正后的ECS服务配置
resource "aws_ecs_service" "nodejs-service" { name = "nodejs-service" cluster = aws_ecs_cluster.project_cluster.id task_definition = aws_ecs_task_definition.nodejs.arn launch_type = "FARGATE" desired_count = 1 load_balancer { target_group_arn = module.alb.target_group_arns[0] container_name = aws_ecs_task_definition.nodejs.family container_port = 8080 } network_configuration { subnets = var.vpc.public_subnets assign_public_ip = true } }
额外优化建议
- 由于使用FARGATE启动类型,建议将ALB模块中
target_groups的target_type修改为ip,因为Fargate任务没有EC2实例ID,使用ip才能正确将任务IP注册到目标组。 - 确保ALB安全组允许80端口的外部入站流量,ECS任务所在安全组允许来自ALB安全组的8080端口流量。
内容的提问来源于stack exchange,提问作者Ahmed Omar
相关产品推荐
相关产品推荐

