Terratest

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

Terratest — это Go-библиотека для тестирования, позволяющая инженерам писать автоматизированные интеграционные тесты для модулей Terraform путём реального создания инфраструктуры на AWS, Azure, GCP, Kubernetes или других провайдерах и последующей проверки соответствия развёрнутых ресурсов ожидаемым условиям. Тест Terratest вызывает terraform.InitAndApply для запуска terraform init и terraform apply, выполняет HTTP-проверки, SSH-команды или SDK-утверждения против живых ресурсов и в конце вызывает terraform.Destroy для очистки — гарантируя, что каждый тестовый запуск начинается с чистого состояния. Terratest является стандартным инструментом валидации переиспользуемых модулей Terraform в экосистеме HashiCorp и хорошо сочетается с tflint, Checkov и terraform validate для формирования полной пирамиды тестирования IaC. Команды обычно запускают Terratest в выделенной CI-стадии с краткосрочными облачными учётными данными и используют t.Parallel() в Go для параллельного выполнения нескольких тестов модулей, сокращая общее время конвейера.

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

Terratest для 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" и пр.

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

Ловушки Terratest: пропуск тестов "Terraform же это просто конфиг" (это код, уничтожающий реальную инфру на опечатке); flake terratest из-за rate-лимитов облака + сбоев cleanup (всегда defer cleanup); policy-checks игнорируются разработчиками ("просто merge" без фикса) — делайте их required CI-гейтами.

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

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