Terraform v0.12不再支持tfvars文件块写法,升级后报错如何解决
Terraform v0.12+ 不支持tfvars块语法的解决方案
根因说明
Terraform v0.12 对HCL语法做了标准化升级,明确禁止在.tfvars变量文件中直接使用块结构定义,所有变量必须通过表达式赋值的方式声明,你遇到的报错就是该语法限制导致的,不需要清理配置或迁移资源,仅调整少量语法即可兼容原有逻辑。
最低成本兼容方案
1. 调整tfvars文件写法
仅需要在原来的块名后加等号=,将块结构转换为map类型字面量赋值即可,原有键值对内容完全不用修改:
# 修改后的UAT.tfvars写法,仅新增=号 global_vpc_subnets = { prod = "subnet-96eb8ae1,subnet-d54cf78c" nonprod = "subnet-badfc9de,subnet-dac2d5ac,subnet-0afc716f0974da5bc" }
2. 补全变量类型声明
在你定义global_vpc_subnets变量的variables.tf文件中,显式声明该变量的类型为map,确保类型校验通过:
variable "global_vpc_subnets" { type = map(string) description = "全局VPC子网映射表" # 原有默认值配置可保留 }
验证
调整后你原有调用变量的逻辑(比如var.global_vpc_subnets.nonprod按环境取值的逻辑)完全不需要修改,直接执行terraform plan即可验证配置正常加载,不会影响已创建的资源。
其他可选方案
如果你的配置中存在大量嵌套块结构的tfvars配置,不想逐一修改,可以将原有块配置迁移到对应环境的.tf文件中,用local值定义,通过环境参数切换加载即可,不过该方案修改成本远高于第一种。
内容的提问来源于stack exchange,提问作者scrow
相关产品推荐
相关产品推荐

