Я создаю сетевую лабораторию AWS VPC через Terraform.
Я хочу добавить шлюз NAT, чтобы экземпляры моей частной сети могли получать доступ к Интернету для обновлений программного обеспечения.
От Terraform спецификация вы можете видеть, что "allocation_id" является обязательным атрибутом:
allocation_id - (Обязательный) идентификатор распределения эластичного IP-адреса для шлюза.
Проверено также в AWS спецификация - На шаге 1:
Шлюз NAT требует эластичного IP-адреса в вашей общедоступной подсети ...
У меня вопрос: Почему шлюз NAT не может использовать простой non static IPv4 address
?
В чем логическая причина этого? (технически это единственный вариант настройки).
Заметка: Вопрос в сфере AWS, а не в Terraform.
Краткий пример конфигурации Nat Gateway в Terraform:
resource "aws_nat_gateway" "natgw" {
allocation_id = "${(aws_eip.nateip.id)}"
subnet_id = "${(aws_subnet.public.id)}"
depends_on = ["aws_internet_gateway.igw"]
}
Невозможно обойтись без эластичного IP-адреса для этих шлюзов NAT, вероятно, потому, что шлюзы могут быть перезапущены и воссозданы автоматически (и, следовательно, уменьшить прерывание, зависнув на том же IP-адресе)
EIP не требует дополнительных затрат при подключении, поэтому вам нужно только разблокировать их после удаления шлюза NAT.
В некоторых ситуациях использование экземпляра NAT вместо шлюза NAT может быть вариантом. В этом случае будет работать динамический общедоступный IP-адрес. Экземпляр NAT также можно использовать в качестве узла перехода или кеширующего прокси (для вашего репозитория пакетов). Но надо управлять собой.
Исходящий шлюз NAT IPv6 также не требует определения EIP.
Это связано с тем, что шлюзы NAT могут быть перезапущены либо из-за обслуживания, либо из-за сбоев. поэтому отказоустойчивый AWS заставляет вас использовать EIP.
как предлагает eckes, вы можете создать свой собственный экземпляр NAT, который в прошлом был единственным способом наттинга.
Вы можете проверить этот модуль terraform https://github.com/terraform-community-modules/tf_aws_nat