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

Terraform环境级tfvars配置及多模块变量传递最佳实践咨询

Terraform 多环境 tfvars 与变量传递最佳实践

一、调整项目结构(添加 tfvars 文件)

直接在每个环境目录下新增环境专属的 terraform.tfvars 文件,最终结构如下:

├── modules
│   ├── adf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   ├── variables.tf  # 定义模块所需变量(如tags)
│   └── storage
│       ├── main.tf
│       ├── outputs.tf
│       ├── variables.tf  # 同样定义模块级变量
├── dev
│   ├── main.tf
│   ├── provider.tf
│   ├── variables.tf      # 定义环境级变量
│   └── terraform.tfvars  # dev环境变量赋值
└── prod
    ├── main.tf
    ├── provider.tf
    ├── variables.tf      # 定义环境级变量
    └── terraform.tfvars  # prod环境变量赋值

二、变量传递实现步骤

1. 模块层:定义通用变量

在每个模块的 variables.tf 中声明需要外部传入的变量(比如tags),保证模块的通用性,不绑定具体环境值:

# modules/adf/variables.tf
variable "tags" {
  type        = map(string)
  description = "资源通用标签,用于标识环境、归属等信息"
}

然后在模块的 main.tf 中引用该变量,例如给资源添加标签:

# modules/adf/main.tf
resource "azurerm_data_factory" "example" {
  # 其他配置...
  tags = var.tags
}

2. 环境层:统一管理环境变量

在每个环境的 variables.tf 中定义环境级的通用变量,作为模块变量的入口:

# dev/variables.tf
variable "common_tags" {
  type        = map(string)
  description = "dev环境下所有资源的通用标签集合"
}

接着在环境的 main.tf 中,将环境变量统一传递给所有模块:

# dev/main.tf
module "adf" {
  source = "../modules/adf"

  tags = var.common_tags
}

module "storage" {
  source = "../modules/storage"

  tags = var.common_tags
}

3. tfvars 文件:赋值环境专属值

在每个环境的 terraform.tfvars 中填写该环境的具体变量值,比如不同的tags:

# dev/terraform.tfvars
common_tags = {
  Environment = "dev"
  Project     = "my-data-platform"
  Owner       = "dev-team"
}
# prod/terraform.tfvars
common_tags = {
  Environment = "prod"
  Project     = "my-data-platform"
  Owner       = "prod-team"
  SLA         = "99.99%"
}

4. 执行命令

进入对应环境目录执行Terraform命令即可,系统会自动加载目录下的 terraform.tfvars:

# 进入dev目录执行
cd dev
terraform init
terraform plan
terraform apply

三、核心最佳实践总结

  • 环境隔离:每个环境目录独立维护tfvars,避免不同环境的变量值互相干扰,生产环境更安全。
  • 模块复用:模块只定义变量接口,不硬编码环境值,同一模块可在dev、prod等环境复用。
  • 统一传递:通过环境级变量统一向所有模块传递通用属性(如tags),确保同一环境下资源标识一致。
  • 默认加载:使用 terraform.tfvars 作为文件名,执行命令时无需额外指定参数,简化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:44:51