如何通过Terraform关联AWS网络负载均衡与目标组?
我已在AWS控制台创建了target group(目标组)和network load balancer(网络负载均衡),希望通过Terraform将二者关联,尝试了以下代码:
resource "aws_lb_target_group_attachment" "test" { target_group_arn = "arn:aws:elasticloadbalancing:us-east-1:12345:targetgroup/test-tg/c3a301edff7c8274" target_id = "arn:aws:elasticloadbalancing:us-east-1:12345:loadbalancer/net/test-nlb/05019d0fbcc689ad" }
但出现如下错误:
Error: registering targets with target group: ValidationError: 'arn:aws:elasticloadbalancing:us-east-1:12345:loadbalancer/net/test-nlb/05019d0fbcc689ad' is not a valid Application Load Balancer ARN
AWS Provider配置确认无误:
provider "aws" { region = "us-east-1" }
请问完成该关联操作还缺失了什么?
问题原因与解决方法
错误核心原因:
aws_lb_target_group_attachment资源的作用是给目标组注册EC2实例、IP地址、Lambda函数这类后端目标,而非关联负载均衡器和目标组。将NLB的ARN填入target_id字段,不符合该字段的参数要求,因此触发报错。正确关联方式:负载均衡器与目标组的关联,需通过给NLB创建监听器并配置转发规则实现,Terraform中的具体实现方式如下:
resource "aws_lb_listener" "test_nlb_listener" { load_balancer_arn = "arn:aws:elasticloadbalancing:us-east-1:12345:loadbalancer/net/test-nlb/05019d0fbcc689ad" port = "80" # 根据业务需求调整端口 protocol = "TCP" # NLB默认使用TCP协议,可按需修改为UDP/TCP_UDP等 default_action { type = "forward" target_group_arn = "arn:aws:elasticloadbalancing:us-east-1:12345:targetgroup/test-tg/c3a301edff7c8274" } }若需配置多路径/多域名的复杂转发规则,可在上述监听器基础上,额外创建
aws_lb_listener_rule资源补充规则。兼容性检查:确认目标组类型与NLB兼容——Network Load Balancer仅支持
instance或ip类型的目标组,不支持lambda类型目标组。
内容的提问来源于stack exchange,提问作者placplacboom

