amazon-web-services - 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 网关?将不胜感激任何帮助。
更新:对于任何对此场景有疑问的人,我为正在寻找答案的其他人更新了代码。
解决方案
以下是不正确的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)
原因是您将拥有与私有子网一样多的路由表。
推荐阅读
- python - 如何仅使用卷积层实现图像分类?
- excel - 在 Sheet2 中的 targetSheet 中粘贴图表
- python - 我想在用户无法输入正数时打印它会告诉他们该数字无效(例如-8.25)
- c++ - 如何使用 GetSysColorBrush 获取颜色?
- c# - 将对象列表加密和解密为 byte[]
- java - 为什么从属性文件读取时环境变量始终为空?
- python - 使用函数的返回值
- php - php7.0.33 session_write_close 失败
- wordpress - 将作者的 Wordpress 帖子网格(最新帖子)添加到自定义帖子类型
- postgresql - 是否可以使用“postgres”数据库中的数据升级 Cloud SQL postresql 版本