Workspaces и окружения

Тема дорожной карты · Terraform

Управление окружениями с воркспейсами — это паттерн Terraform, использующий terraform workspace new, terraform workspace select и интерполяцию ${terraform.workspace} для развёртывания одной и той же HCL-конфигурации в нескольких изолированных окружениях — разработки, стейджинга и production — из единого корневого модуля. Каждый воркспейс поддерживает собственный terraform.tfstate в remote-бэкенде, поэтому случайный terraform destroy в dev не может затронуть состояние prod, хранящееся в том же S3-бакете или организации Terraform Cloud. При управлении окружениями с воркспейсами команды, как правило, сочетают выбор воркспейса со среда-специфичными tfvars-файлами (-var-file=${terraform.workspace}.tfvars) для управления размером ресурсов, регионом и количеством реплик для каждого окружения. Подход на основе воркспейсов хорошо работает для небольших команд и простых топологий, но крупные организации часто переходят на полностью отдельные конфигурации бэкенда для каждого окружения — ради более строгой изоляции, независимых зон поражения и более чётких границ IAM-разрешений.

Как это работает

Workspaces и окружения — как 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"-слоями.

Типичные ошибки

Ловушки Workspaces и окружения: workspaces для prod/dev и случайный apply не в том workspace (одна shell-сессия = реальный урон); коммит *.tfvars с секретами (используйте SOPS или vault); расхождение dev/prod-модулей до разной инфры (нет паритета = баги только в prod).

Связанные понятия

Полезные ресурсы