Terraform 中的 tfvars 文件是什么以及如何使用它?
Source: Dev.to
当您使用 Terraform 时,一个关键原则是您可以编写可重用且可扩展的代码,这些代码可以在多个环境中使用,而无需重新编写或复制。
这就是 tfvars 文件发挥作用的地方。该文件允许您快速高效地定义和自定义变量值,使部署更加一致,也更容易管理。
什么是 Terraform 中的 tfvars 文件?
tfvars 文件在 Terraform 中用于为 Terraform 配置定义输入变量的值。它让您能够为变量提供具体值,从而轻松为不同环境(例如开发、测试或生产)定制部署。
在 Terraform 部署中自定义变量有多种方式;然而,使用 tfvars 文件是最常见且最有效的方法。
Source: …
如何使用 tfvars 文件?
展示如何使用 tfvars 文件的最佳方式是通过示例代码进行演示。我们来创建一个项目,用于定义一个 Azure 资源组。
1. 定义资源组(硬编码)
# Define the Resource Group
resource "azurerm_resource_group" "resource_rg" {
name = "rg-example"
location = "uksouth"
tags = {
Environment = "Demo"
Owner = "Sarah Lean"
}
}
完整代码可在此处查看。
这段基础代码可以工作,但硬编码的值使得在不同环境之间复用变得困难。为避免重复,我们将引入变量。
2. 创建 variables.tf
在项目文件夹中创建名为 variables.tf 的文件,并在其中定义变量。为每个变量添加描述和默认值。
variable "resource_group_name" {
description = "The name of the resource group"
type = string
default = "azurergtechielass"
}
variable "location" {
description = "The Azure region to deploy resources in"
type = string
default = "Sweden Central"
}
variable "environment" {
description = "The environment for the resources"
type = string
default = "Demo"
}
variable "owner" {
description = "The owner of the resources"
type = string
default = "Techie Lass"
}
3. 在资源中引用变量
# Define the Resource Group
resource "azurerm_resource_group" "resource_rg" {
name = var.resource_group_name
location = var.location
tags = {
Environment = var.environment
Owner = var.owner
}
}
如果此时运行 terraform apply,资源组将使用 variables.tf 中的默认值创建。
4. 创建 terraform.tfvars 文件
如果想覆盖默认值,可以使用 tfvars 文件。 在项目文件夹中创建 terraform.tfvars 并为每个变量赋值:
resource_group_name = "techielass-demo-rg"
location = "France Central"
environment = "Blog"
owner = "Sarah"
现在运行 terraform plan,会看到 Terraform 正在从 tfvars 文件中读取值,而不是使用默认值。

Terraform 计划命令使用 tfvars 文件
使用多个 tfvars 文件针对不同环境
tfvars 文件的好处在于可以为每个环境维护独立的文件,例如:
dev.tfvarstest.tfvarsprod.tfvars
运行 Terraform 时,指向相应的文件:
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"
这种做法消除了为每个环境重写代码的需求;只需修改对应的 tfvars 文件,即可加快部署速度并降低出错概率。
摘要
使用 tfvars 文件作为 Terraform 部署的一部分可以使您的代码更加灵活、可复用且高效。
通过将变量值与主要配置代码分离,您可以避免硬编码值,使代码更易于维护,并能够在多个环境中实现更好的扩展。

