Сравнение 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 с помощью подключаемых модулей, называемых поставщиками. Несколько провайдеров Terraform для Azure позволяют управлять инфраструктурой Azure. При написании конфигурации Terraform вы указываете необходимые провайдеры, которые используете. При запуске terraform init указанный поставщик устанавливается и становится доступным для использования в коде.

Средства CLI

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

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

  • az bicep: команды az bicep позволяют выполнять такие задачи, как установка Bicep, создание и публикация файлов Bicep.
  • az deployment. В статье о развертывании ресурсов с помощью Bicep и Azure CLI объясняется, как использовать Azure CLI с файлами Bicep для развертывания ресурсов в Azure.

Интерфейс командной строки 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 Export for Terraform. (Экспорт Azure для Terraform — это средство с открытым кодом, принадлежаемое и поддерживаемое корпорацией Майкрософт в репозитории Azure/aztfexport GitHub.)

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

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

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

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

Note

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

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

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

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

Сводка

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