terraform workspace
Тема дорожной карты · Terraform
Воркспейсы Terraform — это именованные среды состояния внутри одной конфигурации Terraform-бэкенда, позволяющие поддерживать несколько независимых файлов terraform.tfstate из одного корневого модуля HCL. Создание воркспейса командой terraform workspace new staging переключает активный контекст так, что все последующие операции terraform plan и terraform apply читают и записывают в отдельный путь состояния, изолируя изменения от воркспейса default и любого другого именованного воркспейса. Воркспейсы Terraform экспонируют текущее имя через выражение ${terraform.workspace}, обеспечивая условную логику в HCL для варьирования конфигураций ресурсов — типов инстансов, количества реплик, DNS-имён — для каждого окружения. Хотя воркспейсы Terraform являются лёгким механизмом изоляции окружений, они разделяют учётные данные провайдеров и контроль доступа к бэкенду, поэтому критически важные для production окружения часто выигрывают от полностью отдельных конфигураций бэкенда и корневых модулей для более строгой безопасности и операционных границ.
Как это работает
terraform workspace — как Terraform разделяет state между средами. Две стратегии: встроенные workspaces (terraform workspace new prod — один state-файл с несколькими "именованными" записями; легковесно, но ограничено), или отдельные root-модули per environment (envs/dev/, envs/staging/, envs/prod/ — полная изоляция, повтор части конфига). Второй — production-стандарт. Env-специфичные переменные — в *.tfvars (prod.tfvars, staging.tfvars).
Когда применять
В production — отдельные директории per environment: полная изоляция, разные state-файлы, разные credentials, разный blast radius. Terraform workspaces — только для ephemeral per-feature-branch сред, где нужна disposable инфра. Общую логику — в модули; per-env директории должны быть тонкими "compose"-слоями.
Типичные ошибки
Ловушки terraform workspace: workspaces для prod/dev и случайный apply не в том workspace (одна shell-сессия = реальный урон); коммит *.tfvars с секретами (используйте SOPS или vault); расхождение dev/prod-модулей до разной инфры (нет паритета = баги только в prod).