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



这是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

在这种情况下,如果您希望能够声明给我们选择控制的变量,您可以参考它。有关工作区和模块的更多详细信息,请阅读此处。

最新更新