Workspace
🚀 Terraform Workspaces: Что это и зачем они нужны?
Terraform Workspaces – это встроенный механизм управления разными средами (environments) в одном конфигурационном коде, без необходимости дублирования кода или создания отдельных Terraform проектов.
1️⃣ Как это работает?
• По умолчанию у Terraform есть один workspace → default.
• Можно создать дополнительные workspace для разных окружений:
terraform workspace new dev
terraform workspace new prod
• Каждому workspace соответствует свой state-файл, например:
• terraform.tfstate.d/dev/terraform.tfstate
• terraform.tfstate.d/prod/terraform.tfstate
• При переключении workspace Terraform работает с разным state, но использует тот же HCL-код.
2️⃣ Когда использовать Terraform Workspaces?
✅ Когда надо управлять разными окружениями (dev, staging, prod) из одного кода.
✅ Когда хочется избежать дублирования кода (например, модули для разных клиентов).
✅ Когда хочется проще управлять state для разных инстансов.
🚨 Когда НЕ стоит использовать workspaces?
• Workspaces не подходят для крупных проектов с разными инфраструктурами, т.к. state-файл все равно общий для всех workspace.
• Лучше использовать отдельные backend-хранилища для каждого окружения (terraform.backend).
3️⃣ Практическое использование
terraform workspace new staging # Создаем workspace
terraform workspace list # Список всех workspaces
terraform workspace select dev # Переключаемся на dev
terraform workspace show # Текущий workspace
Как использовать workspace в коде Terraform?
resource "aws_instance" "example" {
count = terraform.workspace == "prod" ? 3 : 1 # В prod создаем 3 VM, в dev — 1
ami = "ami-123456"
}
4️⃣ Альтернативы Workspaces
• Разные Terraform backend (например, отдельные S3-бакеты) для разных окружений.
• Модули и переменные вместо workspace.
• Terraform Cloud + separate workspaces для разных окружений.
💡 Вывод:
Terraform Workspaces – удобный инструмент для управления окружениями, но в энтерпрайз-проектах лучше разносить state по разным backend’ам.