Сравнение Terraform и Bicep

Чтобы добиться масштабирования, команды DevOps всегда ищут способы быстрого развертывания кода с доверенным и повторяемым процессом. Когда дело доходит до облака и инфраструктуры, этот процесс все чаще выполняется с помощью инфраструктуры как кода (IaC). Средства IaC варьируются от средств общего назначения до инструментов, предназначенных для определенных сред. Terraform является примером бывшего, а Bicep предназначен для обработки задач, связанных с Azure.

В этой статье мы сравниваем девять функций инфраструктуры и интеграции Bicep и Terraform. Понимание этих различий помогает решить, какой инструмент лучше всего поддерживает инфраструктуру и процессы.

Состояние и серверная часть

Как Terraform, так и Bicep являются требуемой конфигурацией состояния (DSC), что упрощает управление ИТ-инфраструктурой и инфраструктурой разработки в виде кода. Terraform хранит состояние управляемой инфраструктуры и конфигурации. Terraform использует эти сведения для сопоставления реальных ресурсов с конфигурацией, отслеживания метаданных и повышения производительности больших инфраструктур. Состояние хранится в локальном файле с именем terraform.tfstate, но также может храниться удаленно. Очень важно создать резервную копию и защитить файлы состояния. Как и Terraform, Bicep декларативно и цели ищет. Однако Bicep не сохраняет состояние. Вместо этого Bicep использует добавочное развертывание.

Целевые объекты инфраструктуры

При сравнении Bicep с Terraform для управления облачной инфраструктурой важно учитывать целевую облачную среду:

  • Только Azure
  • Многооблачные или гибридные облака

Bicep — это Azure, который не предназначен для работы с другими облачными службами.

Если ваша цель заключается в автоматизации развертываний в любой из следующих сред, Terraform, скорее всего, является лучшим вариантом:

  • Среды виртуализации
  • Сценарии с несколькими облаками, такие как Azure и другие облака
  • Локальные рабочие нагрузки

Terraform взаимодействует с другими поставщиками облачных служб или API с помощью подключаемых модулей, называемых поставщиками. Существует несколько поставщиков Azure Terraform, которые позволяют управлять инфраструктурой Azure. При написании конфигурации Terraform необходимо указать необходимые поставщики, которые вы используете. При запуске terraform init указанный поставщик устанавливается и используется из кода.

Средства CLI

Средства интерфейса командной строки играют ключевую роль в оркестрации с помощью реализации и управления технологией автоматизации. Bicep и Terraform предлагают инструменты CLI.

Bicep интегрируется с Azure CLI, что позволяет разработчикам использовать az такие команды, как:

Интерфейс командной строки Terraform позволяет выполнять такие задачи, как проверка и форматирование кода Terraform, создание и применение плана выполнения.

Bicep также предоставляет функцию, которая упрощает интеграцию Bicep с Azure Pipelines. Существует аналогичная функция, доступная для Terraform, но необходимо скачать и установить расширение задач Terraform Azure Pipelines для Visual Studio. После установки можно запустить команды CLI Terraform из Azure Pipelines. Кроме того, Terraform и Bicep поддерживают GitHub Actions для автоматизации сборок, тестов и развертываний программного обеспечения.

Обработка

Существуют некоторые важные различия между Bicep и Terraform с точки зрения эффективности и оптимизации развертываний. При использовании Bicep обработка выполняется на стороне основной службы инфраструктуры Azure. Эта функция предоставляет такие преимущества, как предварительная обработка для проверка политики или доступности для развертывания нескольких экземпляров в регионе. При использовании Terraform обработка выполняется в клиенте Terraform. Таким образом, предварительная обработка не включает вызовы к Azure, так как он использует состояние и HCL (язык HashiCorp) для определения необходимых изменений.

Проверка подлинности

Функции проверки подлинности Azure зависят от Bicep и Terraform. При использовании Bicep маркер авторизации предоставляется во время запроса на отправку Bicep-файла и шаблона ARM. ARM гарантирует, что у вас есть разрешение на создание развертывания и развертывание ресурсов в указанном шаблоне. Terraform проверяет подлинность каждого API на основе учетных данных поставщика, таких как Azure CLI, субъект-служба или управляемые удостоверения для ресурсов Azure. Кроме того, в одной конфигурации можно использовать несколько учетных данных поставщика.

Интеграции Azure

Кроме того, следует рассмотреть возможность использования таких функций Azure, как Политика Azure и взаимодействие каждого из них с другими инструментами и языками. Предварительная проверка Bicep определяет, не соответствует ли ресурс политике, чтобы он завершился сбоем перед развертыванием. Таким образом, разработчики могут исправить ресурсы с политикой с помощью предоставленных шаблонов ARM. Шаблон ARM можно использовать для создания назначения политики другому ресурсу для автоматического исправления. Однако Terraform завершается ошибкой при развертывании ресурса, который запрещен из-за политики.

Интеграция портала

Одним из основных преимуществ, что Bicep имеет по сравнению с Terraform, — это возможность автоматизировать действия портала. С помощью Bicep можно использовать портал Azure для экспорта шаблонов. Экспорт шаблона помогает понять синтаксис и свойства, которые развертывают ресурсы. Вы можете автоматизировать будущие развертывания, начиная с экспортированного шаблона и изменяя его в соответствии с вашими потребностями. Пока шаблоны Terraform не будут поддерживаться, необходимо вручную перевести экспортируемый шаблон.

Хотя Terraform не предоставляет те же интеграции портала, что и Bicep, существующая инфраструктура Azure может быть взята под управлением Terraform с помощью экспорта Azure для Terraform. (Экспорт Azure для Terraform — это средство с открытым исходным кодом, принадлежаемое и поддерживаемое корпорацией Майкрософт в Репозиторий GitHub в Azure/aztfexport.)

Внеполосные изменения

Изменения конфигурации вне диапазона вносятся в конфигурацию устройства вне контекста средства. Например, предположим, что вы развертываете масштабируемый набор виртуальных машин с помощью Bicep или Terraform. Если изменить масштабируемый набор виртуальных машин с помощью портала, это изменение будет "вне полосы" и неизвестно для средства IaC.

Если вы используете Bicep, изменения вне полосы должны быть согласованы с Bicep и кодом шаблона ARM, чтобы избежать перезаписи этих изменений в следующем развертывании. Эти изменения не блокируют развертывание.

Если вы используете Terraform, необходимо импортировать изменения из диапазона в состояние Terraform и обновить HCL.

Таким образом, если среда включает частые изменения вне диапазона, Bicep является более удобным для пользователя. При использовании Terraform следует свести к минимуму внеполосные изменения.

Облачные платформы

Cloud Adoption Framework (CAF) — это коллекция документации, рекомендаций и инструментов для ускорения внедрения облака в рамках облачного пути. Azure предоставляет собственные службы для развертывания целевых зон. Bicep упрощает этот процесс с помощью интерфейса портала на основе шаблонов ARM и реализации целевой зоны. Terraform использует модуль целевых зон корпоративного масштаба для развертывания, управления и эксплуатации с помощью Azure.

Итоги

Bicep и Terraform предлагают множество удобных функций инфраструктуры и интеграции. Эти функции упрощают реализацию технологии автоматизации и управления ими. При принятии решения о том, что лучше всего подходит для вашей среды, важно учитывать, развертывается ли вы в нескольких облаках или в вашей инфраструктуре имеется многооблачная или гибридная облачная среда. Кроме того, не забудьте рассмотреть девять функций, рассмотренных в этой статье, чтобы сделать лучший выбор для вашей организации.