При использовании Azure Blob для управления состоянием, есть ли большая выгода от использования рабочих пространств Terraform?

#terraform #terraform-provider-azure

#terraform #terraform-provider-azure

Вопрос:

Я просматриваю эту статью и пытаюсь понять преимущества рабочих пространств Terraform при использовании хранилища больших двоичных объектов Azure для управления состоянием.

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

Поскольку я использую хранилище больших двоичных объектов Azure для управления состоянием, я могу использовать переменную для использования (переключения) другого контейнера для каждой из сред (например, DEV или PROD) — указано ниже:

введите описание изображения здесь

Какую дополнительную ценность добавляет terraform workspace, которую я не могу сделать с простым состоянием Azure Blob с выделением container_name для каждой среды (DEV, PROD)?

Ответ №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"
  }
}

~projectstestt8                                                                                     ◷ 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.
  

Комментарии:

1. Большое вам спасибо. Этот ответ мне очень помог.