62. Terraform - Тестирование, инструменты и альтернативы
Содержание
Тестирование, инструменты и альтернативы
Завершая этот раздел об инфраструктуре как коде, мы должны упомянуть о тестировании нашего кода, различных доступных инструментах, а также о некоторых альтернативах Terraform для достижения этой цели. Как я уже говорил в начале раздела, я остановился на Terraform, поскольку он, во-первых, бесплатный и с открытым исходным кодом, во-вторых, он кроссплатформенный и не зависит от окружения. Но есть и альтернативы, которые следует рассмотреть, но общая цель состоит в том, чтобы донести до людей, что это способ развертывания инфраструктуры.
Code Rot
Первая область, которую я хочу затронуть в этой сессии, - это гниение кода. В отличие от кода приложений, инфраструктура как код может использоваться, а затем не использоваться в течение очень долгого времени. Возьмем пример: мы собираемся использовать Terraform для развертывания нашей среды VM в AWS, все идеально, все работает с первого раза, и у нас есть наша среда, но эта среда не меняется слишком часто, поэтому код остается в состоянии, возможно, или, надеюсь, хранится в центральном месте, но код не меняется.
А что если что-то изменится в инфраструктуре? Но это делается вне диапазона, или другие вещи меняются в нашей среде.
- Внеполосные изменения (Out of band changes)
- Неприкрепленные версии (Unpinned versions)
- Утратившие актуальность зависимости (Deprecated dependancies)
- Неприменимые изменения (Unapplied changes)
Тестирование
Еще одна огромная область, которая следует за гниением кода и в целом, это возможность протестировать ваш IaC и убедиться, что все области работают так, как должны.
Прежде всего, есть несколько встроенных команд тестирования, на которые мы можем взглянуть:
Command | Description |
---|---|
terraform fmt | Rewrite Terraform configuration files to a canonical format and style. |
terraform validate | Validates the configuration files in a directory, referring only to the configuration |
terraform plan | Creates an execution plan, which lets you preview the changes that Terraform plans to make |
Custom validation | Validation of your input variables to ensure they match what you would expect them to be |
У нас также есть некоторые инструменты тестирования, доступные вне Terraform:
- Найти возможные ошибки (Find possible errors)
- Предупреждать об устаревшем синтаксисе, неиспользуемых объявлениях. (Warn about deprecated syntax, unused declarations.)
- Применять лучшие практики, соглашения об именовании. (Enforce best practices, naming conventions.)
Инструменты сканирования
- checkov - сканирование конфигураций облачной инфраструктуры для поиска неправильных конфигураций до их развертывания.
- tfsec - сканер безопасности статического анализа для кода Terraform.
- terrascan - статический анализатор кода для Infrastructure as Code.
- terraform-compliance - легковесный тестовый фреймворк, ориентированный на безопасность и соответствие требованиям, для terraform, позволяющий проводить негативное тестирование вашей инфраструктуры как кода.
- snyk - сканирует код Terraform на предмет неправильной конфигурации и проблем безопасности.
Управляемое облачное предложение
- Terraform Sentinel - встроенный фреймворк политики как кода, интегрированный с продуктами HashiCorp Enterprise. Она позволяет принимать решения о политике на основе логики и может быть расширена для использования информации из внешних источников.
Автоматизированное тестирование
- Terratest - Terratest - это библиотека Go, которая предоставляет шаблоны и вспомогательные функции для инфраструктуры тестирования.
Стоит упомянуть
Terraform Cloud - Terraform Cloud - это управляемый сервис компании HashiCorp. Оно устраняет необходимость в ненужных инструментах и документации для практиков, команд и организаций для использования Terraform в производстве.
Terragrunt - Terragrunt - это тонкая обертка, которая предоставляет дополнительные инструменты для сохранения DRY конфигураций, работы с несколькими модулями Terraform и управления удаленным состоянием.
Atlantis - Terraform Pull Request Automation.
Альтернативы
В день 57, когда мы начали этот раздел, мы упоминали, что есть некоторые альтернативы, и я очень планирую изучить их после завершения этой задачи.
Cloud Specific | Cloud Agnostic |
---|---|
AWS CloudFormation | Terraform |
Azure Resource Manager | Pulumi |
Google Cloud Deployment Manager |
Я использовал AWS CloudFormation, вероятно, больше всего из вышеперечисленного списка, он является родным для AWS, но я не использовал другие, кроме Terraform. Как вы можете себе представить, версии для конкретных облаков очень хороши для конкретного облака, но если у вас несколько облачных сред, то вам будет сложно перенести эти конфигурации или у вас будет несколько плоскостей управления для ваших усилий IaC.
Я думаю, что следующим интересным шагом для меня будет уделить некоторое время и узнать больше о Pulumi.
Из сравнения Pulumi на их сайте
“И Terraform, и Pulumi предлагают модель инфраструктуры желаемого состояния как кода, где код представляет желаемое состояние инфраструктуры, а механизм развертывания сравнивает это желаемое состояние с текущим состоянием стека и определяет, какие ресурсы должны быть созданы, обновлены или удалены”.
Самое большое отличие, которое я вижу, заключается в том, что в отличие от HashiCorp Configuration Language (HCL) Pulumi позволяет использовать языки общего назначения, такие как Python, TypeScript, JavaScript, Go и .NET.
Краткий обзор Introduction to Pulumi: Modern Infrastructure as Code Мне нравится простота и возможность выбора, которую вам предлагают, и я хочу разобраться в этом немного подробнее.
На этом мы завершаем раздел “Инфраструктура как код” и переходим к тому, что немного пересекается с управлением конфигурацией, и, в частности, по мере того, как мы переходим к общей картине управления конфигурацией, мы будем использовать Ansible для некоторых из этих задач и демонстраций.
Ресурсы
- What is Infrastructure as Code? Difference of Infrastructure as Code Tools
- Terraform Tutorial | Terraform Course Overview 2021
- Terraform explained in 15 mins | Terraform Tutorial for Beginners
- Terraform Course - From BEGINNER to PRO!
- HashiCorp Terraform Associate Certification Course
- Terraform Full Course for Beginners
- KodeKloud - Terraform for DevOps Beginners + Labs: Complete Step by Step Guide!
- Terraform Simple Projects
- Terraform Tutorial - The Best Project Ideas
- Awesome Terraform
- Pulumi - IaC in your favorite programming language!