Terraform.tf 不同环境的参数化或模板

Terraform.tf parameterize or template for different environment

这是 terraform.tf 文件。我想根据环境为 'name' 字段提供不同的值。我该怎么做?

provider "azurerm" {
    version = "=2.46.0"
    features {}
}

terraform {
    backend "azurerm" {
        resource_group_name = "rgtstate"
        storage_account_name = "adststorage"
        container_name = "terraform.tfstate"
  #      access_key = ""
    }
}

data "azurerm_client_config" "current" {}

resource "azurerm_resource_group" "resourcegroup" {
    name = "sk-terraform-rg"
    location = "west europe"
}


resource "azurerm_data_factory" "example" {

  name                = "adfSB"
  location            = azurerm_resource_group.resourcegroup.location
  resource_group_name = azurerm_resource_group.resourcegroup.name
}

resource "azurerm_data_factory_integration_runtime_self_hosted" "example" {
  name                = "VMSHIRSB"
  data_factory_name   = azurerm_data_factory.example.name
  resource_group_name = azurerm_resource_group.resourcegroup.name
}

要根据环境给'name'字段赋予不同的值,如果要同一个配置main.tf文件定义多个环境,可以声明环境variable "env" {}然后在不同环境中的每个资源中的名称上使用 var.env 前缀。您可以通过传递不同的环境变量来动态创建每个资源。

resource "azurerm_resource_group" "resourcegroup" {
    name = "${var.env}-terraform-rg"
    location = "west europe"
}

resource "azurerm_data_factory" "example" {

  name                = "${var.env}-adfSB"
  location            = azurerm_resource_group.resourcegroup.location
  resource_group_name = azurerm_resource_group.resourcegroup.name
}

resource "azurerm_data_factory_integration_runtime_self_hosted" "example" {
  name                = "${var.env}-VMSHIRSB"
  data_factory_name   = azurerm_data_factory.example.name
  resource_group_name = azurerm_resource_group.resourcegroup.name
}

如果你想为不同的环境创建单独的配置文件,你可以创建目录。当您完成将这些环境分成目录后,您的文件结构应如下所示。

.
├── assets
│   ├── index.html
├── prod
│   ├── main.tf
│   ├── variables.tf
│   ├── terraform.tfstate
│   └── terraform.tfvars
└── dev
   ├── main.tf
   ├── variables.tf
   ├── terraform.tfstate
   └── terraform.tfvars

在这种情况下,每个目录中都会有重复的 Terraform 代码。

如果您想使用相同的 Terraform 代码但具有不同的状态文件,则可以使用 workspace-separated 环境。您可以定义 variable "dev_prefix" {}variable "prod_prefix" {}

您的目录将类似于下面的目录。

.
├── README.md
├── assets
│   └── index.html
├── dev.tfvars
├── main.tf
├── outputs.tf
├── prod.tfvars
├── terraform.tfstate.d
│   ├── dev
│   │   └── terraform.tfstate
│   ├── prod
│   │   └── terraform.tfstate
├── terraform.tfvars
└── variables.tf

在这种情况下,如果您希望能够声明为我们提供选择控制的变量,您可以参考this. Read here了解有关工作区和模块的更多详细信息。