aws_lb 的动态子网映射

kry*_*our 1 amazon-web-services terraform terraform-provider-aws

我正在尝试使用 Terraform 创建一个网络负载平衡器,重要的是它与防止被破坏的弹性 IP 相关联。

我有如下代码:

resource "aws_lb" "balancer" {
  name = "${var.name}-nlb"

  internal           = "${var.internal}"
  load_balancer_type = "network"
  subnets            = ["${data.aws_subnet_ids.selected.ids}"]

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  subnet_mapping {
    subnet_id     = "someid"
    allocation_id = "someid"
  }

  tags = "${merge(var.tags,
    map("Terraform", "true"),
    map("Environment", var.environment))}"
}
Run Code Online (Sandbox Code Playgroud)

我所追求的是subnet_mapping动态地制作块,因为这段代码位于一个模块中,我想根据传入的子网数量创建映射数量。要么是,要么是传入预定义的块。

有没有办法做到这一点?对我来说重要的是相关的弹性 IP 需要坚持下去。

Hen*_*kow 6

为此,您可以使用 Terraform 0.12 中的动态块功能。

resource "aws_lb" "balancer" {
  name               = "${var.name}-nlb"
  load_balancer_type = "network"

  dynamic "subnet_mapping" {
    for_each = aws_subnet.public.*.id
    content {
      subnet_id = subnet_mapping.value
      allocation_id = aws_eip.lb[subnet_mapping.key].id
    }
  }
}
Run Code Online (Sandbox Code Playgroud)