#what-to-test-in-terraform
Что вообще тестировать в Terraform-коде?
Что отвечать
Несколько уровней. (1) Статический анализ - валидация HCL, стиль, типовые ошибки: `terraform validate`, `fmt -check`, `tflint`. (2) Security/compliance - HCL соответствует политикам: `checkov`, `trivy`, `tfsec`. (3) Unit tests - `terraform test` с mock-провайдерами, проверяет логику HCL без реального apply. (4) Integration tests - terratest или `terraform test` с реальными провайдерами в sandbox-аккаунте, поднимает инфру, проверяет, сносит. Не всё нужно на каждом проекте; чем больше HCL влияет на прод - тем глубже пирамида.
Что хотят услышать
Senior должен: - дать пирамиду: много дешёвых статических проверок внизу, мало дорогих интеграционных вверху - сказать что для библиотечного модуля (shared в org) нужны unit и integration тесты; для root-конфига одного приложения - часто хватает static + security - различить «тестировать HCL» (логика выражений, count, for_each) и «тестировать инфру» (что AWS реально подняла то что ожидалось) - упомянуть что AWS-tests медленные (минуты на apply), нужно изолировать в отдельный CI job с расписанием, не на каждый PR
Подводные камни
- ✗ Делать интеграционные тесты на каждый PR без sandbox-аккаунта - через неделю получаешь биллинг и rate-limits
- ✗ Думать что `terraform validate` это «тест» - это синтаксический linter, не тест
- ✗ Покрыть статикой 100% и забить на интеграцию - пропустишь баги взаимодействия с провайдером
Follow-up
- ? Какие тесты нужны для shared-модуля, который катают 10 команд?
- ? Чем «тестировать HCL» отличается от «тестировать реальный AWS»?
- ? Где провести границу: что в CI на каждый PR, что в nightly?
Глубина в базе знаний