首页 > 解决方案 > Terraform NAT 网关设置路由表

问题描述

我正在尝试在我的路由表中设置我的私有多个 NAT 网关,但我对我缺少的东西感到困惑。有人可以帮助我了解我所缺少的代码吗?

这是我的路由表:

resource "aws_route_table" "private" {
  count                     = length(var.private_subnet_cidr_blocks)
  vpc_id                    = aws_vpc.main_vpc.id

  route {
    cidr_block              = "0.0.0.0/0"
    nat_gateway_id          = aws_nat_gateway.nat-gw[count.index].id
  }

  tags = {
    Name = "private-rtable-${count.index+1}"
  }
}

resource "aws_route_table_association" "private" {
  count                     = length(var.private_subnet_cidr_blocks)
  subnet_id                 = element(aws_subnet.private.*.id, count.index)
  route_table_id            = element(aws_route_table.private.*.id, count.index)
}

这是我的 NAT EIP 和 NAT 网关:

resource "aws_eip" "nat-eip" {
  count                     = length(data.aws_availability_zones.available.names)
  vpc                       = true
}

resource "aws_nat_gateway" "nat-gw" {
  count                     = length(data.aws_availability_zones.available.names)
  allocation_id             = element(aws_eip.nat-eip.*.id, count.index)
  subnet_id                 = element(aws_subnet.public.*.id, count.index)

  tags = {
    Name = "NAT-GW-${count.index+1}"
  }
}

我以前想将每个 NAT 网关附加到我的路由表,目的地为 0.0.0.0/0,但无法做到。有没有办法让您的 NAT 网关在您的架构中具有高可用性,或者您应该只附加一个 NAT 网关?如果是这种情况,我需要输入什么才能使其仅在 Terraform 中附加一个 NAT 网关?将不胜感激任何帮助。

更新:对于任何对此场景有疑问的人,我为正在寻找答案的其他人更新了代码。

标签: amazon-web-servicesterraformaws-nat-gateway

解决方案


以下是不正确的aws_route_table.private

  count                     = var.private_subnet_cidr_blocks

它应该是:

  count                     = length(var.private_subnet_cidr_blocks)

还有你的aws_route_table_association.private,而不是:

route_table_id            = aws_route_table.private.id

应该有:

route_table_id            = element(aws_route_table.private.*.id, count.index)

原因是您将拥有与私有子网一样多的路由表。


推荐阅读