Тестирование кода Terraform
Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform можно создавать файлы конфигурации с применением синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.
Terraform — это инструмент в формате "инфраструктура как код" (IaC). Это означает, что файлы Terraform и других инструментов такого формата обрабатываются как исходный код проекта. В частности, к ним применяются управление версиями и управление исходным кодом. Кроме того, частью процесса также должно быть тестирование. В этой статье приводятся общие сведения о разных типах тестов, которые можно выполнять для проекта Terraform.
Реализация тестирования интеграции
Интеграционное тестирование позволяет проверить, не нарушается ли существующий код внесенными изменениями. Непрерывной интеграцией (CI) в DevOps называется процесс, который обеспечивает автоматическую компиляцию всей системы при каждом изменении базы кода, например при отправке любого запроса на вытягивание в репозиторий Git. В следующем списке приведены распространенные примеры интеграционных тестов.
- Средства статического анализа кода, такие как Lint и Format.
- Выполните команду terraform validate, чтобы проверить синтаксис файлов конфигурации.
- Выполните команду terraform plan, чтобы проверить, работает ли конфигурация должным образом.
Реализация модульного тестирования
Модульные тесты позволяют проверить правильность поведения определенной части или функции программы. Такие тесты пишет разработчик соответствующей функции. Такой подход иногда называют разработкой на основе тестирования (TDD), и этот тип тестирования предусматривает короткие циклы непрерывной разработки. В контексте проектов Terraform модульное тестирование можно реализовать через terraform plan
, чтобы проверять совпадение фактических значений в каждом созданном плане с ожидаемыми значениями.
Модульное тестирование становится все более полезным по мере роста сложности модулей Terraform, например при добавлении следующих механизмов:
- создание динамических блоков;
- Использование циклов
- вычисление локальных переменных.
Как и с интеграционными тестами, модульные тесты зачастую включаются в процесс непрерывной интеграции.
Реализация тестирования на соответствие требованиям
Тестирование соответствия позволяет убедиться, что конфигурация соответствует некоторым политикам, которые вы определили для проекта. Например, вы можете определить геополитические соглашения об именовании для ресурсов Azure. Также можно указать, что виртуальные машины должны создаваться только на основе определенного подмножества образов. Для применения таких правил будет использоваться тестирование соответствия.
Тестирование соответствия также обычно включается в процесс непрерывной интеграции.
Реализация комплексного (E2E) тестирования
Тесты E2E позволяют проверить работу программы перед развертыванием в рабочей среде. Предположим, ваш модуль Terraform должен развертывать две виртуальные машины в виртуальной сети. Вы можете сделать так, чтобы эти виртуальные машины не могли проверять связь друг с другом. В этом сценарии можно определить тест для проверки требуемого результата перед развертыванием.
Тестирование E2E обычно состоит из трех этапов. Во-первых, конфигурация применяется к тестовой среде. Затем выполняется код для проверки результатов. И наконец, тестовая среда инициализируется заново или удаляется (например, отменяется выделение виртуальной машины).