能否在tfvars文件中定义变量并在后续内容中进行替换?
关于Terraform tfvars文件内部变量引用的问题
不能直接在.tfvars文件内部实现这种变量引用逻辑,原因是:.tfvars的作用仅为给Terraform根模块的输入变量提供字面量值,它不支持Terraform的表达式插值语法(比如你示例里的${name}),Terraform会把这类符号当作普通字符串内容处理,不会解析成变量引用。
给你几个可行的替代方案:
方案1:在配置文件中组合值
- 先在
variables.tf里定义基础变量:variable "name" { type = string } - 在需要使用组合域名的资源/输出配置中直接用表达式拼接:
resource "aws_route53_zone" "alb_default" { name = "${var.name}.example.pvt." } - 最后在.tfvars里只需要给
name赋值:name = "abc123"
- 先在
方案2:使用局部值统一管理
如果多个地方需要用到这个组合后的域名,可在配置文件中定义局部值,避免重复拼接:locals { alb_r53_domain = "${var.name}.example.pvt." }之后在需要的地方直接引用
local.alb_r53_domain即可。方案3:外部脚本预处理(非原生)
如果你一定要在tfvars层面管理这类组合值,可以用shell脚本(比如envsubst、sed)提前替换tfvars文件中的占位符,再交给Terraform处理,但这属于外部工具方案,不是Terraform原生支持的。
内容的提问来源于stack exchange,提问作者user1601716
相关产品推荐
相关产品推荐

