Паттерны организации
Тема дорожной карты · Terraform
Паттерны воркспейсов Terraform — это устоявшиеся стратегии использования terraform workspace для организации инфраструктуры в нескольких окружениях, регионах или тенантах в рамках одной конфигурации Terraform. Наиболее распространённый паттерн использует один воркспейс на окружение (например, terraform workspace new dev, terraform workspace new prod) в сочетании с интерполяцией ${terraform.workspace} в HCL для варьирования размеров инстансов, количества реплик и выбора tfvars-файлов для каждого воркспейса. Альтернативный паттерн воркспейсов Terraform — подход «один корневой модуль на окружение», при котором каждое окружение находится в собственной директории со своими tfvars и конфигурацией бэкенда, избегая риска совместного состояния при ошибочном наборе имени воркспейса перед terraform apply. HashiCorp в целом рекомендует паттерн директория-на-окружение для production-нагрузок, поскольку он обеспечивает более строгую изоляцию, чёткое владение кодом и независимую блокировку состояния через DynamoDB или Terraform Cloud.
Как это работает
Паттерны организации — как 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 для prod/dev и случайный apply не в том workspace (одна shell-сессия = реальный урон); коммит *.tfvars с секретами (используйте SOPS или vault); расхождение dev/prod-модулей до разной инфры (нет паритета = баги только в prod).