Terraform Stacks

Тема дорожной карты · Terraform

Terraform Stacks — способ описывать и раскатывать несколько связанных Terraform-конфигураций как единое целое, вышедший в GA в конце 2025 года (Terraform 1.13+; отдельный terraform-stacks-cli влит в основной CLI). Stacks решают проблему «много почти одинаковых окружений»: вместо копирования корневых модулей по папкам environments/dev, environments/prod вы описываете компоненты один раз, а различия окружений выносите в деплойменты. Модель состоит из двух видов файлов: *.tfcomponent.hcl (что разворачиваем — блоки component, provider, variable, output) и *.tfdeploy.hcl (куда и с какими входами — блоки deployment, orchestrate). Важно: полноценная оркестрация Stacks — это фича HCP Terraform (облако/Enterprise); в OpenTofu Stacks нет.

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

Компоненты ссылаются на обычные модули и связываются между собой:


component "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  inputs = { cidr = var.cidr }
}
component "app" {
  source = "./modules/app"
  inputs = { vpc_id = component.vpc.vpc_id }
}
# deployments.tfdeploy.hcl
deployment "prod"    { inputs = { cidr = "10.0.0.0/16" } }
deployment "staging" { inputs = { cidr = "10.1.0.0/16" } }

Конфигурация компонентов одинакова для всех деплойментов, а различия задаются входными переменными деплоймента. Связи между компонентами (выход одного как вход другого, например component.vpc.vpc_id) Stacks разрешают автоматически и строят из них граф зависимостей раскатки. У каждого деплоймента своё изолированное состояние, поэтому dev и prod не мешают друг другу. Блок orchestrate описывает правила авто-аппрувов между группами — например, применять prod только после успешного staging. Провайдеры в Stacks объявляются иначе, чем в обычном Terraform (отдельный workflow передачи конфигураций провайдера в компоненты).

Когда применять

Для одного окружения или без HCP Terraform Stacks избыточны — хватит модулей и workspaces.

Типичные ошибки

Связанные понятия

Полезные ресурсы

Проверить знания (2)

Загрузка вопросов…