Terraform中aws_route_table引用aws_nat_gateway报错求助
Terraform NAT网关路由表配置错误解决办法
问题根源
aws_nat_gateway.private是基于aws_subnet.public的键创建的(键为子网ID或自定义标识),但aws_route_table.private的for_each用了toset(["test", "prod"]),导致用each.key("test"或"prod")访问aws_nat_gateway.private时,找不到匹配的键,触发报错。
修正方案
根据实际需求选择对应方案:
方案一:路由表与公有子网一一对应
如果每个公有子网的NAT网关对应一个私有路由表,直接将路由表的for_each与NAT网关保持一致:
# Create Route tables and default routes resource "aws_route_table" "private" { for_each = aws_subnet.public vpc_id = aws_vpc.main.id route { cidr_block = "0.0.0.0/0" nat_gateway_id = aws_nat_gateway.private[each.key].id } }
方案二:保留"test"/"prod"路由表标识
如果确实需要创建名为"test"和"prod"的路由表,需建立环境与公有子网的映射关系,通过子网ID匹配NAT网关:
# 定义环境与公有子网的映射(替换成你的实际子网ID) variable "subnet_env_map" { type = map(string) default = { "test" = "test-public-subnet-id" "prod" = "prod-public-subnet-id" } } # Create Route tables and default routes resource "aws_route_table" "private" { for_each = var.subnet_env_map vpc_id = aws_vpc.main.id route { cidr_block = "0.0.0.0/0" nat_gateway_id = aws_nat_gateway.private[each.value].id } }
额外语法修正
原代码中aws_eip.nat_gateway_ip存在多余闭合大括号,需修正:
resource "aws_eip" "nat_gateway_ip" { for_each = aws_subnet.public vpc = true }
内容的提问来源于stack exchange,提问作者bitbucket
相关产品推荐
相关产品推荐

