You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform调用本地模块时父目录terraform.tfvars文件不生效如何解决

Terraform 父目录 terraform.tfvars 不生效原因

核心底层规则

Terraform 的terraform.tfvars(含*.auto.tfvars)仅对执行命令时工作目录下的根模块生效,既不会自动向下传递给被调用的子模块,也不会跨目录加载任意子目录下的变量文件。

具体触发问题的原因

  • 子模块无自动继承父模块变量的机制:所有子模块中声明的变量,必须在调用子模块的代码块中显式传值,无法直接读取父目录terraform.tfvars中的取值。
  • 你观测到的「模块优先读取自身目录下的变量文件」属于误判:Terraform 默认不会加载子模块目录内的任何tfvars文件,你看到的子模块取值实际是子模块variables.tf中声明的变量default默认值。
  • 常见错误场景:父目录根模块调用子模块时仅指定了source参数,没有给子模块变量赋值,导致子模块直接走默认值,看起来就像父目录的tfvars没有生效。
修复方法
  1. 首先在父目录的根模块variables.tf中,声明和子模块需要用到的同名变量
  2. 调用子模块时,将父模块加载到的变量值显式传递给子模块,示例代码如下:
# 父目录根模块 variables.tf 先声明变量,会自动读取同目录 terraform.tfvars 的赋值
variable "instance_count" {
  type = number
}
variable "instance_type" {
  type = string
}

# 父目录根模块 main.tf 中调用子模块时传值
module "service" {
  source = "./modules/your-local-module"
  
  instance_count = var.instance_count
  instance_type  = var.instance_type
}

如果需要传递的变量较多,也可以直接将根模块的所有变量批量传递给子模块:

module "service" {
  source = "./modules/your-local-module"
  vars   = var
}

额外注意事项

不要在子模块目录下存放terraform.tfvars文件,该文件放置在子模块目录下不会生效,子模块的默认取值统一在子模块的variables.tf中通过default字段声明即可。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:09:02