Терраформируйте шлюз NAT для настройки таблицы маршрутов

#amazon-web-services #terraform #aws-nat-gateway

#Amazon-web-services #Terraform #aws-nat-gateway

Вопрос:

Я пытаюсь настроить свои частные несколько 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)
}
  

Это мой EIP NAT и шлюз 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? И если бы это было так, что мне нужно было бы ввести, чтобы подключить только один шлюз NAT в Terraform? Был бы признателен за любую помощь.

ОБНОВЛЕНИЕ: для всех, у кого есть вопросы по этому сценарию, я обновил код для других, которые ищут ответы.

Ответ №1:

Следующее неверно в 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)
  

Причина в том, что у вас будет столько таблиц маршрутов, сколько ваших частных подсетей.

Комментарии:

1. Большое вам спасибо! Я знаю, что был близок к тому, чтобы сделать это правильно, но вы помогли мне с этим. Действительно ценю это !.