Что такое организация (organization) и рабочее пространство (workspace) в Terraform, и как часто вы их используете?

«Что такое организация (organization) и рабочее пространство (workspace) в Terraform, и как часто вы их используете?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В экосистеме Terraform (особенно в Terraform Cloud/Enterprise) Organization (Организация) и Workspace (Рабочее пространство) — это ключевые абстракции для управления состоянием и совместной работы.

Organization — это контейнер верхнего уровня, представляющий компанию, команду или крупный проект. В ней настраиваются:

  • Политики Sentinel/OPA.
  • Управление доступом (RBAC) для пользователей и команд.
  • Настройки VCS-провайдеров (GitHub, GitLab).
  • Общие переменные и провайдеры.

Workspace — это изолированная среда для запуска Terraform-конфигураций. Обычно соответствует отдельному окружению (dev, staging, prod) или компоненту инфраструктуры (сеть, база данных, k8s-кластер). В каждом workspace хранится свое состояние (.tfstate).

Как я это использую в ежедневной работе: Мы используем эту модель для всех проектов. Например, для микросервисного приложения структура может выглядеть так:

  • Организация: company-prod
  • Workspace networking-prod: Управляет VPC, подсетями, шлюзами.
  • Workspace k8s-cluster-prod: Управляет EKS/AKS кластером.
  • Workspace app-backend-prod: Управляет Deployment'ами и сервисами внутри кластера для бэкенда.

Пример CLI-команд для работы с workspace (в локальном режиме с бэкендом S3):

# Инициализация с бэкендом, который поддерживает workspace
terraform init -backend-config="bucket=my-tfstate-bucket"

# Создание нового workspace для staging-окружения
terraform workspace new staging

# Переключение между workspace
terraform workspace select prod

# Просмотр текущего workspace и списка всех
terraform workspace show
terraform workspace list

Почему это эффективно:

  1. Изоляция состояний: Изменения в dev не затрагивают prod.
  2. Повторное использование кода: Одна и та же конфигурация (модуль) может применяться к разным workspace с разными переменными.
  3. Интеграция с CI/CD: Пайплайн запускает terraform plan/apply в конкретном workspace, основываясь на ветке Git (например, merge в main -> apply в workspace prod). Используется постоянно — это стандартный паттерн для управления multi-environment инфраструктурой.