【问题标题】:When using Azure Blob for state management, is there any big benefit for using Terraform Workspaces?使用 Azure Blob 进行状态管理时,使用 Terraform 工作区有什么大好处吗?
【发布时间】:2021-02-23 02:34:21
【问题描述】:

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

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

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

terraform 工作区增加了哪些附加值,而我无法通过每个环境(DEV、PROD)使用专用 container_name 的简单 Azure Blob 状态来做到这一点?

【问题讨论】:

    标签: terraform terraform-provider-azure


    【解决方案1】:

    你不能在 terraform 后端设置变量。因此,如果您想在没有不同 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.
    

    【讨论】:

    • 非常感谢。这个答案对我帮助很大。
    猜你喜欢
    • 2020-02-02
    • 2013-11-27
    • 2019-03-10
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2021-10-23
    • 2014-10-26
    相关资源
    最近更新 更多