Terraform Workspaces: управление средами (dev/staging/prod)

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

terraformworkspacesstate

Когда инфраструктура растёт, почти сразу возникает вопрос: как безопасно разделить dev, staging и prod, не копируя один и тот же Terraform-код в три разные папки. Один из базовых инструментов для этого — Terraform Workspaces.

Что такое Terraform Workspace

Workspace в Terraform — это способ использовать одну и ту же конфигурацию, но хранить разные state-файлы для разных окружений.

Проще говоря:

  • код инфраструктуры остаётся общим
  • состояние ресурсов разделяется по средам
  • dev не конфликтует с staging и prod

Это удобно, когда ресурсы отличаются в параметрах, но логика инфраструктуры одинакова.

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

По умолчанию Terraform работает в workspace default.
Можно создать отдельные рабочие пространства:

  • dev
  • staging
  • prod

Основные команды:

  • terraform workspace list — список workspaces
  • terraform workspace new dev — создать новое окружение
  • terraform workspace select prod — переключиться
  • terraform workspace show — показать текущее workspace

Как использовать workspace в коде

Terraform позволяет получить имя текущего окружения через:

terraform.workspace

Пример:

resource "aws_instance" "app" {
  instance_type = terraform.workspace == "prod" ? "t3.medium" : "t3.micro"
  tags = {
    Environment = terraform.workspace
  }
}

Так можно:

  • менять размеры инстансов
  • подставлять разные теги
  • переключать настройки сети, БД и лимитов

Плюсы Terraform Workspaces ✅

  • меньше дублирования кода
  • удобное разделение state
  • быстрый запуск одинаковой инфраструктуры для нескольких сред
  • подходит для типовых окружений

Ограничения и риски ⚠️

Workspaces — не универсальное решение.

Важно понимать:

  • если prod сильно отличается от dev, конфиг станет перегружен условиями
  • легко ошибиться и применить изменения не в то окружение
  • workspaces не заменяют полноценную стратегию изоляции аккаунтов, VPC и секретов

Для критичных production-сред часто лучше дополнительно разделять:

  • cloud-аккаунты
  • backend для state
  • CI/CD пайплайны
  • права доступа

Когда использовать

Workspaces подходят, если:

  • инфраструктура между средами почти одинакова
  • различия сводятся к переменным и размерам ресурсов
  • нужен быстрый и понятный способ разделить dev/staging/prod

Если же среды архитектурно разные, практичнее использовать:

  • отдельные директории
  • отдельные root modules
  • Terragrunt или другую обвязку

Практический совет 💡

Не завязывайте всю логику только на terraform.workspace. Лучше комбинировать его с variables и tfvars, чтобы конфигурация оставалась читаемой и предсказуемой.

Итог

Terraform Workspaces — это простой механизм управления окружениями, который помогает держать единый код и раздельное состояние. Для небольших и средних проектов это удобный способ организовать dev/staging/prod без лишнего дублирования. Для сложной enterprise-инфраструктуры workspaces стоит применять осознанно и в связке с более строгой изоляцией 🔐

📌 Загляните в подборку каналов про IT — там много полезного про Terraform, DevOps, cloud и инфраструктуру.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же