Чтобы добиться масштабирования, команды 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 указанный поставщик устанавливается и используется из кода.
Средства интерфейса командной строки играют ключевую роль в оркестрации с помощью реализации и управления технологией автоматизации. 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 предлагают множество удобных функций инфраструктуры и интеграции. Эти функции упрощают реализацию технологии автоматизации и управления ими. При принятии решения о том, что лучше всего подходит для вашей среды, важно учитывать, развертывается ли вы в нескольких облаках или в вашей инфраструктуре имеется многооблачная или гибридная облачная среда. Кроме того, не забудьте рассмотреть девять функций, рассмотренных в этой статье, чтобы сделать лучший выбор для вашей организации.
Сегодняшние организации сталкиваются с динамическими проблемами, которые требуют большого количества гибкости и гибкости. Общедоступные облачные среды соответствуют этим потребностям через автоматизацию, особенно через инфраструктуру в виде кода (IaC). Два ведущих варианта IaC : Hashicorp Terraform и Bicep. Terraform — это средство с открытым исходным кодом, которое помогает специалистам DevOps управлять локальными и облачными службами с помощью декларативного кода. Microsoft Bicep использует декларативный синтаксис для упрощения развертывания ресурсов Azure.
В этой статье мы сравниваем несколько ключевых функций взаимодействия с пользователем, чтобы определить сходство и различия между Terraform и Bicep.
Синтаксис языка
Bicep и Terraform — это языки, относящиеся к домену (DSL), которые легко использовать и сэкономить время разработчика. Оба инструмента включают аналогичные ключевое слово и концепции. Некоторые из этих понятий — параметризация, поддержка проектов с несколькими файлами и поддержка внешних модулей. Однако Terraform предлагает более богатую библиотеку встроенных функций для определенных задач. Выбор между этими двумя является вопросом предпочтения и опыта. Ниже приведены краткие обзоры и некоторые пользовательские функции, которые предлагает каждый синтаксис языка.
Bicep — это декларативный язык. Таким образом, порядок, в котором элементы определены в коде, не влияют на процесс обработки развертывания. Целевой объект Bicep по умолчанию область — это целевой resourceGroup
объект Bicep. Пользователи могут использовать переменные для инкапсулирования сложных выражений и сделать файлы Bicep более читаемыми. Концепция модулей позволяет повторно использовать код Bicep в проектах или командах.
Terraform также является декларативным языком, использующим язык конфигурации HashiCorp (HCL). Основной целью HCL является объявление ресурсов. Другие языковые функции служат для упрощения определения ресурсов. И, как и Bicep, порядок кода в файлах конфигурации Terraform не является значительным.
Вспомогательные языки
Bicep и Terraform предоставляют вспомогательные средства языка для упрощения задач программирования. Так как оба являются понятными для пользователя, выбор в значительной степени зависит от предпочтений и требований.
Bicep поддерживает выражения, чтобы сделать код более динамическим и гибким. В Bicep-файле можно использовать различные типы функций. Некоторые из этих типов функций являются логическими, числовыми и возражениями. Циклы могут определять несколько копий ресурса, модуля, свойства, переменной или выходных данных. Циклы помогают избежать повторения синтаксиса в файле Bicep.
Terraform также предлагает встроенные функции, которые вызываются из выражений для преобразования и объединения значений. Как и Bicep, выражения Terraform могут включать сложные выражения, такие как ссылки на данные, экспортированные ресурсами и условное вычисление. Циклы могут обрабатывать коллекции и создавать несколько экземпляров ресурса без необходимости повторять код.
Модули
Bicep и Terraform поддерживают концепцию модулей. Модули позволяют создавать повторно используемые компоненты из кода. Модули играют ключевую роль в масштабировании инфраструктуры и очистке конфигурации. Так как модули инкапсулируют группы ресурсов, они сокращают объем кода, который необходимо разработать для аналогичных компонентов инфраструктуры. Хотя модули работают аналогично в Bicep и Terraform, они зависят от реализации.
В Bicep модуль — это просто Bicep-файл, развернутый из другого файла Bicep. Модули Bicep служат для улучшения удобочитаемости файлов Bicep. Эти модули также масштабируются. Пользователи могут совместно использовать модули между командами, чтобы избежать дублирования кода и уменьшения ошибок. Дополнительные сведения об определении модуля Bicep см. в разделе "Модули Bicep".
В Terraform модули являются основным средством упаковки и повторного использования конфигураций ресурсов в командах. Модули Terraform — это контейнеры для нескольких ресурсов, упакованных в виде одной логической единицы. Модуль состоит из коллекции .tf
файлов, .tf.json
хранящихся вместе в каталоге. Помимо модулей из локальной файловой системы Terraform также может загружать модули из различных источников. К этим источникам относятся реестр, локальный путь, модули и GitHub.
Жизненный цикл подготовки
Terraform и Bicep позволяют разработчикам проверять конфигурацию перед развертыванием, а затем применять изменения. Terraform обеспечивает большую гибкость для уничтожения всех удаленных объектов, управляемых определенной конфигурацией. Эта функция полезна для очистки временных объектов после завершения работы. Важно учитывать требования жизненного цикла типичных развертываний инфраструктуры при выборе оптимального варианта.
Bicep предлагает операцию what-if , которая позволяет предварительно просмотреть изменения перед развертыванием Bicep-файла. Azure Resource Manager предоставляет what-if
операцию и не вносит никаких изменений в существующие ресурсы. Затем можно использовать Azure PowerShell или Azure CLI с файлами Bicep для развертывания ресурсов в Azure. Azure PowerShell и Azure CLI не поддерживают развертывание удаленных файлов Bicep. Однако вы можете использовать интерфейс командной строки Bicep для создания файла Bicep в шаблон JSON, а затем загрузить JSON-файл в удаленное расположение.
В Terraform команда плана terraform аналогична операции Bicepwhat-if
. С помощью команды вы создадите terraform plan
план выполнения для предварительного просмотра перед применением. Затем вы применяете план выполнения с помощью команды terraform apply . Почти все, что вы делаете с Terraform, включает использование как команд, так terraform plan
и terraform apply
команд.
Начало работы
Bicep и Terraform предлагают ресурсы, которые помогут вам приступить к работе. Модуль Learn для Bicep помогает определить, как должны быть настроены ресурсы Azure. Вы также можете ознакомиться с развертываниями нескольких ресурсов Azure, чтобы предоставить вам практический опыт.
Аналогичным образом, HashiCorp Learn предоставляет пользователям различные учебные ресурсы Terraform, чтобы научить вас устанавливать и использовать Terraform. Эти ресурсы содержат сведения о том, как использовать Terraform для подготовки инфраструктуры в Azure.
Разработка кода
Интерфейс разработки кода зависит от количества надстроек, доступных для выбранного редактора. К счастью, Bicep и Terraform предлагают ресурсы для повышения эффективности разработки кода.
Для Bicep одна из самых эффективных надстроек — расширение Bicep Visual Studio Code. Расширение предоставляет такие функции, как проверка кода, Intellisense, доступ к свойству dot и автозаполнения свойств.
Для Terraform расширение Terraform Visual Studio Code с серверомязыка Terraform предлагает множество функций, что и расширение Bicep Visual Studio Code. Например, расширение также поддерживает выделение синтаксиса, IntelliSense, навигацию по коду и обозреватель модулей. HashiCorp также предлагает [подробные инструкции по установке] в репозитории GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) для настройки и использования сервера языка Terraform.
Покрытие Azure
Bicep имеет преимущество по сравнению с Terraform, когда дело доходит до настройки ресурсов Azure. Bicep глубоко интегрирован с службами Azure. Кроме того, она предлагает немедленную поддержку новых функций Azure. Terraform предоставляет два поставщика, которые позволяют пользователям управлять Azure: AzureRM и AzAPI. Поставщик AzureRM предлагает полностью адаптированный интерфейс для стабильных служб Azure. Иногда получить этот специализированный опыт может привести к немного задержки. Поставщик AzAPI — это тонкий слой поверх REST API Azure Resource Manager, который ( например, Bicep) обеспечивает немедленную поддержку новых функций Azure. Важно учитывать требования к инфраструктуре вашей организации и полностью ли они поддерживаются перед принятием решения.
Сообщество и поддержка
Сообщество играет ключевую роль в оказании помощи в изучении и преодолении проблем. Как terraform, так и сообщества Bicep предлагают высокий уровень участия и поддержки.
Для поддержки Bicep, где вы идете за помощью, зависит от характера проблемы:
- Ошибки документации. Проблемы с документацией Bicep в Microsoft Learn содержат раздел отзывов.
- Исходный код Bicep и отправка ошибок: посетите репозиторий Microsoft Bicep GitHub, чтобы внести свой вклад в продукт Bicep с открытым кодом и ошибки файлов.
Для поддержки Terraform, где вы идете за помощью, зависит от характера проблемы:
Итоги
Bicep и Terraform — это два ведущих варианта IaC, которые упрощают настройку и развертывание ресурсов Azure. Оба предлагают удобные функции, которые помогают организациям повысить эффективность и производительность. При оценке оптимального соответствия вашей организации тщательно учитывайте требования к инфраструктуре и предпочтения.