使用 Azure Blob 进行状态管理时,使用 Terraform Workspaces 有什么大的好处吗?

When using Azure Blob for state management, is there any big benefit for using Terraform Workspaces?

我正在阅读这篇文章并尝试了解在使用 Azure Blob 存储进行状态管理时 Terraform Workspaces 的好处。

https://danielwertheim.se/terraform-workspaces-and-remote-state-in-azure/

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

terraform 工作空间增加了哪些附加值,我无法使用每个环境(DEV、PROD)具有专用 container_name 的简单 Azure Blob 状态?

首先,您无法在 Terraform 后端设置变量。因此,如果您想在没有不同地形块的情况下重复使用相同的模块,则需要切换到工作区。

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

这是手动驱动 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.