Тестирование
Тема дорожной карты · Terraform
Тестирование Terraform — это практика валидации HCL-конфигураций, модулей и развёрнутой инфраструктуры на нескольких уровнях для обнаружения ошибок до попадания в production. Статический уровень использует terraform fmt -check, terraform validate, tflint и Checkov для инспекции кода без создания ресурсов. Уровень планирования использует terraform plan, сохранённый в файл плана, и инструменты типа OPA или Sentinel для утверждения соответствия политикам запланированных изменений. Интеграционный уровень использует Terratest или нативный фреймворк terraform test (введённый в Terraform 1.6) для создания реальной инфраструктуры, выполнения утверждений и вызова terraform destroy при завершении. Комплексное тестирование Terraform ускоряет рефакторинг общих модулей, обеспечивая быструю обратную связь, и предотвращает регрессии безопасности — открытые группы безопасности или незашифрованные S3-бакеты — от попадания в production-окружения AWS, Azure, GCP или Yandex Cloud.
Как это работает
Тестирование для Terraform: статические проверки (terraform validate, tflint, tfsec, checkov), unit-тесты (моки провайдеров через tftest или tflint), integration-тесты (terratest — на Go, деплоит в реальное облако, ассертит), policy-as-code (OPA, Sentinel, conftest). Новее: нативный terraform test framework (1.6+) даёт unit-test-like workflow внутри Terraform через *.tftest.hcl-файлы.
Когда применять
terraform validate, tflint, tfsec — в CI на каждый PR; быстрые, ловят опечатки + очевидные security-проблемы. terratest — для критичных модулей (тех, что в prod); медленный, но реальный. Принимайте terraform test после перехода на 1.6+. Policy-as-code — для enforce "no public S3", "all RDS encrypted" и пр.
Типичные ошибки
Ловушки Тестирование: пропуск тестов "Terraform же это просто конфиг" (это код, уничтожающий реальную инфру на опечатке); flake terratest из-за rate-лимитов облака + сбоев cleanup (всегда defer cleanup); policy-checks игнорируются разработчиками ("просто merge" без фикса) — делайте их required CI-гейтами.