如何在使用 Terraform 创建网络负载均衡器时附加弹性 IP?

Ste*_*eve 5 nlb amazon-web-services elastic-ip terraform

我正在尝试使用 Terraform 将我的弹性 IP 地址与新创建的网络平衡器相关联。我在aws_lb文档中没有看到像 AWS 控制台中那样添加弹性 IP 的选项。困难在于您必须在创建 NLB 时关联弹性 IP。

编辑:他们现在在他们的文档中做了一个明确的例子!

Nic*_*mer 8

上面的答案是正确的,但是现在可以使用 Terraform 0.12 中提供的动态块来简化。这样做的优点是可以在具有或多或少子网的 vpc 中工作。

resource "aws_lb" "network" {
  name               = "test-lb-tf"
  internal           = false
  load_balancer_type = "network"

  dynamic "subnet_mapping" {
    for_each = data.aws.subnet_ids.public_ids
    content {
      subnet_id     = subnet_mapping.value
      allocation_id = aws_eip.lb.id[subnet_mapping.key].allocation_id
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


yda*_*coR 7

aws_lb资源有一个subnet_mapping块,允许您为网络负载均衡器所在的每个子网指定一个弹性 IP。

一个绝对最小的例子看起来像这样:

resource "aws_eip" "lb" {
  vpc = true
}

resource "aws_lb" "network" {
  name               = "test-lb-tf"
  load_balancer_type = "network"

  subnet_mapping {
    subnet_id     = "${var.subnet_id}"
    allocation_id = "${aws_eip.lb.id}"
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,您可能希望在多个子网中运行负载均衡器,因此您可能会使用以下内容:

variable "vpc" {}

data "aws_vpc" "selected" {
  tags {
    Name = "${var.vpc}"
  }
}

data "aws_subnet_ids" "public" {
  vpc_id = "${data.aws_vpc.selected.id}"

  tags {
    Tier = "public"
  }
}

resource "aws_eip" "lb" {
  count = "${length(data.aws_subnet_ids.public)}"
  vpc   = true
}

resource "aws_lb" "network" {
  name               = "test-lb-tf"
  internal           = false
  load_balancer_type = "network"

  subnet_mapping {
    subnet_id     = "${data.aws_subnet_ids.public.ids[0]}"
    allocation_id = "${aws_eip.lb.id[0]}"
  }

  subnet_mapping {
    subnet_id     = "${data.aws_subnet_ids.public.ids[1]}"
    allocation_id = "${aws_eip.lb.id[1]}"
  }

  subnet_mapping {
    subnet_id     = "${data.aws_subnet_ids.public.ids[2]}"
    allocation_id = "${aws_eip.lb.id[2]}"
  }
}
Run Code Online (Sandbox Code Playgroud)

以上假设您已使用标签标记您的 VPC,并使用Name标签标记您的子网Tier,在这种情况下,该标签public用作任何面向外部的子网的值。然后它为每个公共子网创建一个弹性 IP 地址,每个公共子网中的网络负载均衡器,为每个公共子网附加一个弹性 IP。