我正在通过 Terraform 构建 AWS VPC 网络实验室。
我想添加一个 NAT 网关,以便我的私有网络实例可以访问互联网进行软件更新。
来自 Terraform规格您可以看到“allocation_id”是必需属性:
assignment_id -(必需)网关的弹性 IP 地址的分配 ID。
也在 AWS 中进行了检查规格- 在步骤 1 中:
NAT 网关需要公共子网中的弹性 IP 地址...
我的问题是:为什么 NAT 网关不能使用简单的non static IPv4 address
?
这其中的逻辑原因是什么?(从技术上讲,这是唯一的配置选项)。
笔记:该问题属于 AWS 的范围,而不是 Terraform。
Terraform 中 Nat Gateway 配置的简短示例:
resource "aws_nat_gateway" "natgw" {
allocation_id = "${(aws_eip.nateip.id)}"
subnet_id = "${(aws_subnet.public.id)}"
depends_on = ["aws_internet_gateway.igw"]
}
答案1
没有办法为这些 NAT 网关配备弹性 IP,这可能是因为网关可以自动重新启动和重新创建(因此通过挂在同一个 IP 上可以减少中断)
EIP 在附加时不会产生额外费用,因此您只需确保在删除 NAT 网关后释放它们。
在某些情况下,使用 NAT 实例而不是 NAT 网关是一种选择,在这种情况下,动态公共 IP 就可以发挥作用。NAT 实例还可以用作跳转主机或缓存代理(用于您的软件包存储库)。但您必须自行管理。
IPv6 传出 NAT 网关也不需要定义 EIP。
答案2
这是因为 NAT 网关可能会因维护或崩溃而重新启动。因此,作为故障安全措施,AWS 强制您使用 EIP。
正如 eckes 所建议的,您可以创建自己的 NAT 实例,这在过去是进行 natting 的唯一方法。
您可以检查这个 Terraform 模块https://github.com/terraform-community-modules/tf_aws_nat