如何在Terraform的terraform.auto.tfvars中实现变量值拼接
Terraform中实现变量值拼接的正确方式
你在terraform.auto.tfvars里直接引用变量并做插值的写法行不通,因为.tfvars系列文件仅用于给变量提供静态字面量值,不支持表达式计算或变量引用。要实现你想要的拼接效果,有两种常用方法:
方法一:在变量定义中设置默认值
- 在根目录创建
variables.tf文件,定义变量并利用默认值实现拼接:
variable "locations" { type = object({ eastus = object({ name = string }) }) } variable "resources_group" { type = object({ prod = object({ name = string }) }) # 在这里通过表达式动态生成默认值 default = { prod = { name = "PROD-${var.locations.eastus.name}" } } }
- 在
terraform.auto.tfvars中仅提供locations的静态值:
locations = { eastus = { name = "eastus" } }
Terraform会自动使用variables.tf中定义的默认逻辑,将PROD-与locations.eastus.name拼接后作为resources_group.prod.name的值。
方法二:使用本地值(Locals)处理动态计算
如果不需要将resources_group作为对外暴露的变量,仅在配置内部使用,可以用本地值实现:
在main.tf中定义本地值:
locals { locations = { eastus = { name = "eastus" } } resources_group = { prod = { name = "PROD-${local.locations.eastus.name}" } } }
之后在资源配置中直接引用local.resources_group.prod.name即可,这种方式无需单独的.tfvars文件(若不需要外部配置)。
关键说明
.tfvars文件只能写静态键值对,不能包含${...}插值语法或变量引用,这些表达式仅能在.tf格式的配置文件(如variables.tf、main.tf)中使用。- 动态生成变量值时,优先在变量默认值或本地值中处理,不要试图在
.tfvars里做计算。
内容的提问来源于stack exchange,提问作者Benj
相关产品推荐
相关产品推荐

