AWS - Terraform 创建多个 ALB 目标组,每个目标组具有不同的 IP 目标

问题描述 投票:0回答:1

我正在尝试创建多个 AWS ALB 目标组,每个目标组具有不同的 IP 目标集。

我的变量定义如下。

variable "target_group_names" {
  type    = list(string)
  default = ["tg1", "tg2", "tg3", "tg4"]
}

variable "target_ips" {
  type = list(list(string))
  default = [
    ["10.0.0.1", "10.0.0.2"],
    ["10.0.1.1", "10.0.1.2", "10.0.1.3"],
    ["10.0.2.1", "10.0.2.2"],
    ["10.0.3.1", "10.0.3.2"]
  ]
}

我能够使用下面的方法创建所有目标组,没有任何问题。

resource "aws_lb_target_group" "target_groups" {
  count       = length(var.target_group_names)
  name        = var.target_group_names[count.index]
  port        = 80
  protocol    = "HTTP"
  target_type = "ip"
  vpc_id      = var.aws_vpc_id
}

现在我正在尝试向这些单独的目标组添加不同的 IP 目标。

resource "aws_lb_target_group_attachment" "tg_attachment" {
  count             = length(var.target_group_names)
  target_group_arn  = aws_lb_target_group.target_groups[count.index].arn
  target_id         = var.target_ips[count.index]
  port              = 80
  availability_zone = "all"
}

这给了我下面的错误,这是一个有效的错误,因为对于 target_id 我正在传递上面的列表。

“属性“target_id”的值不合适:需要字符串。”

我正在尝试找到一种方法来创建多个目标组,然后为每个目标组分配不同的 IP 集,而无需为每个目标组编码资源块。我是 Terraform 的新手,因此我们将不胜感激。

谢谢你

我尝试了几种组合,但没有成功。

amazon-web-services terraform terraform-provider-aws
1个回答
0
投票

我还没有机会尝试该解决方案,但我会首先重新考虑组变量来尝试类似的方法。

variable "target_group_names" {
  type    = map(set(string))
  default = {
    "tg1": ["10.0.0.1", "10.0.0.2"], 
    "tg2": ["10.0.1.1", "10.0.1.2", "10.0.1.3"], 
    "tg3": ["10.0.2.1", "10.0.2.2"], 
    "tg4": ["10.0.3.1", "10.0.3.2"]
  }
}

然后为了使事情更具可读性,请在局部变量中提取组。

locals {
  target_groups = [
    for name, ips in var.target_group_names : {
      name = name
      ips  = ips
    }
  ]
}

此时您应该能够迭代这两个资源:

resource "aws_lb_target_group" "target_groups" {
  for_each = { for idx, tg in local.target_groups : idx => tg }
  name     = each.value.name
  port        = 80
  protocol    = "HTTP"
  target_type = "ip"
  vpc_id      = var.aws_vpc_id
}


resource "aws_lb_target_group_attachment" "tg_attachment" {
  for_each = {
    for idx, tg in aws_lb_target_group.target_groups : idx => tg
  }
  target_group_arn = tg.arn
  target_id        = each.key
  # other configuration...
}
© www.soinside.com 2019 - 2024. All rights reserved.