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