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了解有关工作区和模块的更多详细信息。
这是 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了解有关工作区和模块的更多详细信息。