Terraform配置aws_route_table时route属性值类型错误问题咨询
问题解答
这不是Terraform AWS官方文档的描述错误,是AWS Provider版本差异和属性定义规则导致的,具体原因如下:
核心原因
- 两种
route定义方式的规则差异
你使用的AWS Provider v3.63.0版本中,aws_route_table的route支持两种定义方式:
- 嵌套块写法(你最后使用的无报错写法):即直接写多个
route {}块,该写法下只需填写当前路由需要的字段,其余可选字段会自动赋值为null,无需显式声明,写法简洁。 - 列表属性赋值写法(你最初的报错写法):即使用
route = [{}, {}]的方式赋值,该写法下Terraform要求数组内的每个对象必须包含该属性定义的所有可选字段,哪怕你不需要该字段也要显式赋值为空,所以才会出现要求你补全十多个冗余字段的报错。
- 文档版本不匹配
你查看的是最新版本的AWS Provider文档,目前v4及以上大版本的AWS Provider已经完全废弃了route的列表属性赋值写法,官方文档只展示嵌套块的写法,如果你没有切换到v3.63.0对应的历史版本文档查看,就容易出现写法不匹配的问题。
使用建议
- 继续使用嵌套
route {}的写法即可,这是AWS Provider各版本通用的官方推荐写法,没有冗余字段,也能兼容后续版本升级。 - 不要使用列表属性赋值的
route写法,该写法已经被新版本废弃,且需要填写大量冗余字段,性价比极低。
内容的提问来源于stack exchange,提问作者Lukonjun
相关产品推荐
相关产品推荐

