Разделение dev/stage/prod
Тема дорожной карты · Terraform
Разделение окружений в Terraform — это практика хранения инфраструктуры разработки, стейджинга и production в изолированных state-файлах, конфигурациях провайдеров и контекстах учётных данных, чтобы terraform apply в одном окружении никогда не мог случайно затронуть другое. Два основных подхода: разделение по директориям — где каждое окружение (например, envs/dev/, envs/prod/) содержит собственный backend.tf, указывающий на отдельный S3-бакет или воркспейс Terraform Cloud, — и воркспейсы Terraform (terraform workspace new prod), которые совместно используют одну директорию конфигурации, но поддерживают отдельные state-файлы в рамках одного бэкенда. Разделение окружений в Terraform обычно реализуется вместе с среда-специфичными tfvars-файлами (например, dev.tfvars, prod.tfvars), переопределяющими размеры инстансов, количество реплик и флаги функций — передаваемыми в terraform plan и terraform apply с флагом -var-file. Секреты и учётные данные для каждого окружения управляются через динамические секреты Vault, AWS IAM-роли, принимаемые через OIDC в GitHub Actions или GitLab CI, или SOPS-зашифрованные tfvars, закомиченные в репозиторий. Правильное разделение окружений в Terraform обеспечивает ограничение зоны поражения, делает обнаружение дрейфа через terraform plan среда-специфичным и позволяет младшим инженерам безопасно экспериментировать в dev без риска для production-ресурсов AWS, Azure, GCP или Kubernetes.
Как это работает
Разделение dev/stage/prod — как 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"-слоями.
Типичные ошибки
Ловушки Разделение dev/stage/prod: workspaces для prod/dev и случайный apply не в том workspace (одна shell-сессия = реальный урон); коммит *.tfvars с секретами (используйте SOPS или vault); расхождение dev/prod-модулей до разной инфры (нет паритета = баги только в prod).