这是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代码,但有不同的状态文件,可以使用工作区分离的环境。您可以定义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
在这种情况下,如果您希望能够声明给我们选择控制的变量,您可以参考它。有关工作区和模块的更多详细信息,请阅读此处。