Terraform давно стал стандартом для IaC, но одна из частых ошибок команд — проверять только terraform plan, считая это тестированием. На практике этого мало: код может быть синтаксически корректным, но развернуть нерабочую инфраструктуру. Именно здесь нужны Terratest и Kitchen-Terraform.
Зачем тестировать Terraform-код
- ловить ошибки до продакшена
- проверять, что ресурсы реально создаются
- валидировать сетевые настройки, IAM-права, outputs
- снижать риск поломок при изменениях в модулях
- ускорять CI/CD и ревью инфраструктурного кода
Terratest: мощный подход для DevOps и инженеров 🧪
Terratest — это фреймворк на Go для автоматического тестирования инфраструктуры.
Что он умеет:
- запускать
terraform init/apply/destroy - проверять outputs
- делать HTTP, SSH, API и cloud-проверки
- тестировать AWS, Azure, GCP, Kubernetes и Docker
- писать полноценные интеграционные тесты
Когда выбирать Terratest
- нужен гибкий контроль над тестами
- есть сложная логика проверок
- инфраструктура должна тестироваться как приложение
- команда готова использовать Go
Пример сценария:
- поднять VPC и EC2
- получить IP через output
- проверить доступность порта 22 или 80
- убедиться, что теги и security groups применились корректно
- удалить стенд после теста
Плюсы Terratest
- высокая гибкость
- близость к реальным integration tests
- удобен для complex IaC pipelines
Минусы
- нужен Go
- выше порог входа
- тесты могут быть дороже и дольше по времени
Kitchen-Terraform: проще стартовать 🍴
Kitchen-Terraform — это расширение для Test Kitchen, ориентированное на тестирование Terraform через Ruby-экосистему.
Что обычно проверяют:
- успешность применения Terraform
- соответствие outputs ожидаемым значениям
- наличие и свойства ресурсов
- compliance и базовые инфраструктурные проверки
Когда подходит Kitchen-Terraform
- нужен быстрый старт
- команда уже знакома с Test Kitchen или Ruby
- тесты типовые и без сложной логики
- важнее удобство, чем максимальная гибкость
Плюсы
- понятная структура
- легче начать
- хорошо подходит для модульных и acceptance-тестов
Минусы
- менее гибкий, чем Terratest
- слабее для сложных end-to-end сценариев
- Ruby-стек подходит не всем командам
Что выбрать 🤔
Terratest — если нужны глубокие интеграционные проверки, сложные сценарии и контроль на уровне кода.
Kitchen-Terraform — если нужен более простой инструмент для базового тестирования Terraform-модулей.
Практические рекомендации
- минимум используйте
terraform fmt,validate,tflint,tfsec/checkov - для модулей добавляйте automated tests в CI
- изолируйте тестовые окружения и теги ресурсов
- обязательно очищайте инфраструктуру после тестов
- не храните секреты в коде и outputs 🔐
Хорошая стратегия: lint + security scan + Terratest/Kitchen-Terraform в CI/CD. Такой подход помогает не просто “проверить Terraform”, а убедиться, что инфраструктура действительно работает как задумано. 🚀
Подборку полезных каналов про IT стоит посмотреть — там часто публикуют практику по DevOps, Terraform и CI/CD.