Продвинутые паттерны

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

Продвинутые паттерны Terraform — это проверенные на практике архитектурные приёмы управления крупными production-кодовыми базами IaC на HashiCorp Terraform или OpenTofu. Эти паттерны решают реальные задачи: кросс-аккаунтные развёртывания в AWS, условное создание ресурсов с помощью count и for_each, динамическая компоновка locals и иерархия модулей с предсказуемым выводом terraform plan. Инженеры применяют такие модели, как hub-and-spoke для модулей, алиасинг провайдеров для мультирегиональной инфраструктуры на AWS, Azure и GCP, а также pipeline-продвижения на основе воркспейсов — для устранения дрейфа конфигурации и обеспечения единообразия. Инструменты tflint, Checkov и Terratest органично встраиваются в рабочие процессы продвинутых паттернов и позволяют обнаруживать некорректные конфигурации до того, как terraform apply доберётся до production. Освоение продвинутых паттернов Terraform позволяет командам масштабировать IaC на сотни сервисов, сохраняя изолированность state-файлов, минимальное количество ссылок на remote-state и среда-специфичность tfvars-файлов.

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

Продвинутые паттерны покрывает for_each с map для стабильной идентичности, dynamic-блоки для повторяющегося nested-конфига, lifecycle { create_before_destroy = true / prevent_destroy / ignore_changes }, depends_on для явного порядка, terraform_data (замена null_resource), replace_triggered_by. Главный паттерн power-user — композиция модулей: маленькие сфокусированные модули + тонкий root-конфиг, их связывающий. Не злоупотребляйте meta-аргументами — они стоят читаемости.

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

create_before_destroy — для ресурсов, которые не можете позволить себе быть down (load balancer, DNS-записи). prevent_destroy — на БД (terraform destroy не должен случайно удалить prod-данные — сделайте шумно). ignore_changes — только для полей, управляемых вне Terraform (auto-scaling desired_capacity — классика). Для сложных flow — генерируйте Terraform через CDK for Terraform (CDKTF) вместо хака HCL.

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

Ловушки Продвинутые паттерны: lifecycle-блоки прячут реальный drift (не видите изменение, потому что игнорите); циклический depends_on; злоупотребление null_resource для "выполнить скрипт" (реальные provisioner — осторожно, или вынесите логику вне Terraform); глубоко вложенные dynamic-блоки, нечитаемые через 3 месяца.

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

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