Terraform, IaC и GitOps: как держать infrastructure drift под контролем
Terraform и GitOps должны делать изменения спокойнее. Но часто выходит наоборот: state непонятен, часть ресурсов давно меняют руками, plan пугает, а drift замечают только после инцидента.
Почему Terraform перестают трогать
Сначала Terraform внедряют, чтобы инфраструктура была описана кодом. Через год команда может бояться запускать apply: непонятно, какой state актуален, какие ресурсы импортированы, что менялось руками и почему plan предлагает слишком много изменений.
Это не проблема самого Terraform. Обычно сломан процесс вокруг него: нет владельцев modules, нет понятного backend/state, нет review plan, есть ручные изменения в cloud console и нет регулярного drift review.
Базовая настройка Terraform, которой можно доверять
Перед расширением IaC нужно привести в порядок базовые вещи: remote state, locking, backup, разделение окружений, naming, provider versions и правила запуска plan/apply.
Хороший признак — любой инженер может открыть pull request, увидеть понятный terraform plan, получить review и понять, какие ресурсы изменятся и какой blast radius у изменения.
Drift control: как находить ручные изменения до аварии
Infrastructure drift — это не только техническая проблема. Часто drift появляется потому, что команде нужно срочно починить production, а безопасного IaC-процесса нет. Поэтому задача не только запретить ручные изменения, а сделать нормальный путь быстрее и понятнее.
Регулярный drift review показывает, где реальное состояние отличается от Terraform state и репозитория. После этого нужно решить: импортировать ресурс, описать изменение кодом, зафиксировать исключение или убрать ручную правку.
Где заканчивается Terraform и начинается GitOps
Terraform и GitOps часто смешивают. В простой модели Terraform отвечает за инфраструктурные ресурсы: cloud, сети, IAM, Kubernetes clusters, registry, DNS, managed services. GitOps отвечает за состояние приложений и Kubernetes-манифестов внутри кластера.
Argo CD или Flux помогают видеть, что реально применено в Kubernetes, кто менял manifests и почему кластер ушёл от Git. Но если cloud/IAM/storage не описаны через IaC, GitOps не решит весь infrastructure drift.
План внедрения без большого риска для production
Не стоит переводить всю инфраструктуру в Terraform одним большим заходом. Безопаснее начать с inventory, выбрать ограниченный scope и двигаться через маленькие проверяемые изменения.
Если Terraform уже есть, первым шагом часто становится не новая автоматизация, а аудит: state, modules, drift, ручные изменения, права, CI-проверки и документация по apply.
Что должно быть на выходе
Результат настройки Terraform и IaC — не просто красивый репозиторий. Команда должна понимать, где живёт state, кто владеет modules, как читать plan, где разрешены исключения и как безопасно применить изменение в production.
Если после внедрения Terraform команда продолжает менять ресурсы руками и боится plan, значит процесс не заработал. Нужно возвращаться к drift review, ownership, smaller scopes и понятной модели apply.
FAQ
Что такое infrastructure drift?
Это расхождение между описанием инфраструктуры в коде/state и реальным production. Drift часто появляется после ручных изменений в cloud console, срочных инцидентов, неполного импорта ресурсов или разных правил между окружениями.
Можно ли внедрить Terraform в уже работающую инфраструктуру?
Да, но поэтапно: inventory, backup state, dry-run, импорт небольших групп ресурсов и проверка plan до apply. Самые критичные production-ресурсы лучше переносить отдельно, с понятным blast radius и откатом.
GitOps заменяет Terraform?
Нет. GitOps обычно управляет Kubernetes-манифестами и sync внутри кластера. Terraform чаще управляет cloud resources, IAM, network, managed services, DNS и самим кластером. В production они дополняют друг друга.
Как безопасно запускать terraform apply в production?
Через маленький scope, review plan, approvals, locking, backup state и согласованное окно изменений. Apply не должен зависеть от личной машины одного инженера и не должен выполняться без понятного rollback/emergency plan.