当使用Azure Blob进行状态管理时,使用Terraform工作区有什么好处吗?

当使用Azure Blob进行状态管理时,使用Terraform工作区有什么好处吗?,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在阅读本文,并试图了解在使用Azure Blob存储进行状态管理时,Terraform工作区的好处 由于我正在使用Azure Blob存储进行状态管理,因此我可以使用一个变量为每个环境(如DEV或PROD)使用(切换到)不同的容器-如下所示: terraform workspace为每个环境(开发、生产)添加了哪些附加值,而我无法使用具有专用容器名称的简单Azure Blob状态来实现这些附加值。因此,如果您想在不使用不同地形块的情况下重用同一模块,您可能需要切换到工作区 有些人会对其所

我正在阅读本文,并试图了解在使用Azure Blob存储进行状态管理时,Terraform工作区的好处

由于我正在使用Azure Blob存储进行状态管理,因此我可以使用一个变量为每个环境(如DEV或PROD)使用(切换到)不同的容器-如下所示:


terraform workspace为每个环境(开发、生产)添加了哪些附加值,而我无法使用具有专用
容器名称的简单Azure Blob状态来实现这些附加值。因此,如果您想在不使用不同地形块的情况下重用同一模块,您可能需要切换到工作区

有些人会对其所有状态使用单个存储帐户。使用该键定义项目。后端将负责根据工作区名称将状态键入单独的位置

▶ cat .\main.tf
variable "environment" {
  type = string
}

terraform {
  backend "azurerm" {
    resource_group_name  = "tfstate"
    storage_account_name = "account"
    container_name       = var.environment
    key                  = "terraform.tfstate"
  }
}

~\projects\test\t8                                                                                     ◷ 9:32:49 AM
▶ terraform init

Initializing the backend...

Error: Variables not allowed

  on main.tf line 9, in terraform:
   9:     container_name       = var.environment

Variables may not be used here.
这是手动驱动terraform命令时小型项目的下降。您还可以在代码中引用
terraform.workspace
,以获得条件

最大的缺点是处理身份验证和变量。如果您使用不同的订阅并以另一订阅的状态登录,您会收到一个可怕的消息,所有内容都需要更换。因此,情境意识需要提高

跟踪输入值需要存储在某个地方。当我以前这样做时,我最终将变量存储为局部变量,并在工作区名称上设置一个条件

▶ cat .\main.tf
variable "environment" {
  type = string
}

terraform {
  backend "azurerm" {
    resource_group_name  = "tfstate"
    storage_account_name = "account"
    container_name       = var.environment
    key                  = "terraform.tfstate"
  }
}

~\projects\test\t8                                                                                     ◷ 9:32:49 AM
▶ terraform init

Initializing the backend...

Error: Variables not allowed

  on main.tf line 9, in terraform:
   9:     container_name       = var.environment

Variables may not be used here.

非常感谢你。这个答案对我帮助很大。