AWS路由表Terraform配置报错:gateway_id参数不被支持
问题解决方案
错误原因
gateway_id 不是 aws_route_table 资源的顶层配置参数,它属于 route 嵌套块的专属参数,直接放在顶层会触发语法报错。另外你当前的公有子网路由表写法虽然没报错,但顶层的 gateway_id 是无效的,Terraform 会自动忽略这个配置,实际路由规则并未生效。
修正步骤
1. 修正公有子网路由表
把 gateway_id 移到 route 块内部,这才是正确的配置方式:
resource "aws_route_table" "wally_jeropa_vpc_public_route_table" { vpc_id = aws_vpc.wally_jeropa.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.wally_jeropa_igw.id # 移到route块内 } tags = { Name = "Public Subnet Route Table." } }
2. 修正私有子网路由表
私有子网的核心特性是不能直接关联IGW(否则会变成公有子网),根据你的需求分两种情况处理:
情况一:私有子网无需访问公网
直接移除顶层的 gateway_id 即可解决报错:
resource "aws_route_table" "wally_jeropa_vpc_private_route_table" { vpc_id = aws_vpc.wally_jeropa.id tags = { Name = "Private Subnet Route Table." } }
情况二:私有子网需要访问公网
此时需要通过NAT网关中转(NAT网关需部署在公有子网),在路由表的 route 块中指定 nat_gateway_id 而非 gateway_id:
# 假设已创建NAT网关资源aws_nat_gateway.wally_jeropa_nat resource "aws_route_table" "wally_jeropa_vpc_private_route_table" { vpc_id = aws_vpc.wally_jeropa.id route { cidr_block = "0.0.0.0/0" nat_gateway_id = aws_nat_gateway.wally_jeropa_nat.id } tags = { Name = "Private Subnet Route Table." } }
内容的提问来源于stack exchange,提问作者emboole
相关产品推荐
相关产品推荐

