Blue-green инфраструктура

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

Blue-Green развёртывания с Terraform — это стратегия выпуска инфраструктуры, поддерживающая два параллельных, идентично настроенных окружения — синее (текущий production) и зелёное (новый кандидат на выпуск) — и атомарно переключающая трафик между ними, обеспечивая нулевое время простоя для рабочих нагрузок AWS, Azure, GCP или Kubernetes. В Terraform Blue-Green развёртывания реализуются созданием зелёного окружения рядом с существующими синими ресурсами с использованием правил жизненного цикла create_before_destroy или условного переключения count и for_each в блоках ресурсов, а затем обновлением взвешенной записи Route 53, целевой группы AWS Application Load Balancer или бэкенда GCP Cloud Load Balancing для перенаправления трафика на зелёный стек. Запуск terraform apply, переключающий трафик, является малорискованной операцией с мгновенным откатом: если зелёное окружение не проходит валидацию, единственный повторный запуск с восстановленным весом трафика для синего окружения завершает откат без прикосновения к серверам приложений. Управление состоянием Terraform критически важно в Blue-Green развёртываниях — каждый стек окружения должен иметь собственный изолированный state-файл (отдельные префиксы S3 или воркспейсы Terraform Cloud), чтобы предотвратить случайный terraform destroy активного production-стека. Команды комбинируют Blue-Green развёртывания с Terraform с рабочими процессами apply на основе PR через Atlantis или GitHub Actions, проверками политик Checkov и дымовыми тестами Terratest для валидации зелёного окружения до переключения трафика.

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

Blue-green инфраструктура покрывает 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.

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

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

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

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