如何在Terraform中通过变量批量创建并关联多组Target Group?
批量创建Target Group并关联实例的Terraform实现方案
基于你已定义的local.target_groups映射,只需通过Terraform的for_each特性遍历该映射,即可批量生成Target Group,再通过组合遍历Target Group和实例的方式批量创建关联附件。
完整实现代码如下:
locals { app_servers = { "server1" = aws_instance.server1.id, "server2" = aws_instance.server2.id } target_groups = { "internal" = { port = 9550 matcher = "200" }, "dev1" = { port = 9152 matcher = "302" }, "sso" = { port = 9154 matcher = "302" }, "terra-test" = { port = 9360 matcher = "200" } } } # 批量创建Target Group resource "aws_lb_target_group" "multi" { for_each = local.target_groups name = "${each.key}-tg" port = each.value.port protocol = "HTTPS" vpc_id = aws_vpc.main.id protocol_version = "HTTP1" health_check { healthy_threshold = 5 interval = 15 protocol = "HTTPS" unhealthy_threshold = 2 timeout = 5 matcher = each.value.matcher path = "/login" } } # 批量为每个Target Group关联两台实例 resource "aws_lb_target_group_attachment" "multi" { for_each = { # 嵌套遍历Target Group和实例,生成唯一的资源键 for tg_key, tg in local.target_groups : for server_key, server_id in local.app_servers : "${tg_key}-${server_key}" => { tg_arn = aws_lb_target_group.multi[tg_key].arn target_port = tg.port server_id = server_id } } target_group_arn = each.value.tg_arn port = each.value.target_port target_id = each.value.server_id }
关键说明:
- 批量创建Target Group:通过
for_each = local.target_groups遍历你定义的TG配置,每个TG的name用each.key(即你定义的TG标识,如internal)拼接-tg生成,port和matcher直接从each.value中读取对应配置。 - 批量关联实例:通过嵌套的
for循环,将每个Target Group与两台实例进行组合,生成形如internal-server1的唯一资源键,确保每个关联附件都是独立的Terraform资源,避免重复或冲突。 - 所有Target Group共享健康检查的其他参数(如检查路径、间隔等),如果需要为不同TG配置不同的健康检查参数,只需在
local.target_groups的每个子项中添加对应字段(比如path),然后在aws_lb_target_group的health_check块中引用each.value.path即可。
内容的提问来源于stack exchange,提问作者user19649255
相关产品推荐
相关产品推荐

