Azure Resource Manager (ARM) Templates против Terraform

ДевОпс Sep 28, 2020

Автор Jane Vyshnova

Главная / Блог / Azure Resource Manager (ARM) Templates против Terraform

Content

  1. Azure Terraform vs шаблоны ARM: Преимущества
  2. Terraform vs Azure Resource Manager
  3. Недостатки Terraform
  4. Преимущества Azure Resource Manager
  5. Заключение
Content

Оба инструмента решают похожие проблемы, их общая цель - упростить и облегчить общее удобство создания, развертывания и масштабирования API и веб-приложений.

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

Azure Resource Manager (ARM) Templates и Terraform
Источник изображения: build5nines.com

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

Есть идеи по поводу вашего проекта?

Свяжитесь с нами!

Сделать запрос

Шаблоны ARM предназначены для развертывания ресурсов только в Azure. Но это продукт Microsoft, что говорит о его высоком качестве. 99,95% корпоративных приложений обладают неоспоримым уровнем безопасности. Вы можете развернуть свою инфраструктуру в едином шаблоне. Более того, он гибкий на всех этапах и средах, включая тестирование, промежуточный и рабочий этапы.

Azure Terraform vs шаблоны ARM: Преимущества

Поскольку Terraform - относительно новый инструмент, давайте посмотрим, может ли он предложить что-то большее, чем обычные шаблоны ARM.

Как мы уже упоминали, одним из основных преимуществ Terraform является единство языка, что позволяет ему работать с Azure, AWS, GCE, OpenStack и локальными развертываниями на одном оборудовании.

Вы можете применить сценарий развертывания облачного сервера к одному и добавить запись DNS к другому поставщику облачных услуг. Если вы выучите язык HCL, сменить поставщика облачных услуг не составит труда. Это несомненное преимущество для разработчиков, которые внедрили AWS, GCP и Azure в свою рабочую среду.

Мощный синтаксис интерполяции HCL позволяет ссылаться на переменные, атрибуты и т.д. В сочетании с плагином IDE это значительно улучшит ваш процесс программирования. Используйте все вместе и в результате вы получите:

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

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

Пример шаблона Terraform ARM 

Terraform ARM пример шаблонаИсточник изображения: medium.com

Неизменная структура

С ARM сервер получает уникальную конфигурацию и историю обновлений. Это вызывает «дрифт конфигурации» и потенциальную уязвимость. В то время как в Terraform модификация компонента приводит к возникновению отдельного состояния путем удаления и построения новой конфигурации системы. Обновление происходит быстро и без ошибок. Чтобы вернуться к предыдущей конфигурации, достаточно просто выбрать 

Декларативный код

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

Клиентская архитектура

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

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

Terraform предоставляет разные способы совместного использования состояния между пользователями, работающими в одной среде (удаленное состояние) и имеющими разные рабочие области. Вы также можете проверить текущее состояние, чтобы убедиться, что оно подходит для текущей операции развертывания.

С Terraform вам нужно дождаться обновления провайдера, прежде чем вы сможете использовать новую функцию. Однако вы все равно можете опробовать новую функцию, просто развернув подходящий пример шаблона Terraform ARM.

Terraform ARM пример шаблона
Источник изображения: adinermie.com

Один из наиболее важных аспектов, на который следует обратить внимание при сравнении этих двух инструментов, - это возможности управления ресурсами, которые они предоставляют.

Terraform vs Azure Resource Manager

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

Сравнивая шаблоны Azure Resource Manager с шаблонами Terraform, стоит отметить, что в ARM развертывание выполняется автоматически без вмешательства пользователя. При развертывании Terraform создает файл состояния - terraform.tfstate, который используется для хранения состояния инфраструктуры отдельно от самой инфраструктуры. Таким образом, вы можете управлять отдельным файлом, а не вносить изменения во всю инфраструктуру.

Файлы состояния могут использоваться другими для ввода данных, включая возможность развертывания приложений в существующей инфраструктуре. Версия ARM-шаблона в Terraform Plan позволяет вам проверить файл состояния и определить, какие изменения необходимо внести в шаблон, без внесения фактических изменений, что экономит время и усилия. Вы можете указать параметр «-out» с командой «plan», чтобы вывести его в файл, а затем передать его команде «Terraform Apply».

ARM Template версия Terraform плана
Источник изображения: samcogan.com

Источники данных

Объекты конфигурации Terraform позволяют собирать данные извне. Например, Azure может использовать источники информации о существующих ресурсах, такие как зоны DNS, роли RBAC, образы дисков и т.д. Подобные источники данных также существуют для AWS и других облаков. Есть также ряд распространенных доступных источников, которые позволяют извлекать данные из файла или zip-архива, а также поставщиков услуг, таких как Git, Data Dog, New Relic и т.д.

Если ни один из этих встроенных ресурсов не соответствует вашим требованиям - не проблема, вы можете использовать внешний источник, который находит и читает специальный скрипт, даже если данные возвращаются в формате JSON.

Модули

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

Модульность Terraform кажется естественной в использовании. Вы можете разделить шаблоны ARM на отдельные блоки, импортировать шаблоны из файлов, URL-адресов и т.д., но у вас не может быть только локально прикрепленного шаблона. Его нужно где-то хранить, например, в хранилище аккаунта.

Проверка развертывания шаблона Terraform Azure ARM

Оба инструмента предоставляют разные механизмы проверки синтаксиса. В ARM вы можете использовать команду «az group deployment validate». Terraform обеспечивает облачную проверку с этапом планирования, который обновляет статус фактической конфигурации и вычисляет разницу между текущей и целевой конфигурациями.

Доступные инструменты

Использование плагина IntelliJ упрощает программирование инфраструктуры. Ваша IDE знает все параметры редактируемого ресурса, предлагает другие модули, переменные HCL и локальные переменные в коде. Модуль ARM для IntelliJ работает нестабильно. Обычно вы должны использовать Visual Studio Code в качестве IDE и дополнительно установить ARM Tools.

Недостатки Terraform

Ресурсы в Terraform создаются Hashicorp, поэтому есть вероятность задержки появления доступных ресурсов. Например, в настоящее время нет ресурса для создания репозитория службы восстановления Azure или сертификата службы приложений. На более низком уровне есть шаблон ARM, который создает некоторые ресурсы PaaS, такие как веб-приложение, SQL и т.д. Шаблон ARM настраивает ресурсы для отправки их диагностических данных в Log Analytics. В Terraform при использовании с Azure для этого нет никаких функций.

Однако есть способ обойти это - Terraform может просто развернуть шаблон ARM, но это не лучшее решение. Во-первых, вы пишете синтаксис JSON ARM внутри ресурса HCL, а во-вторых, используете одинаковую конфигурацию для двух методов, что может быть неудобно.

Файл состояния должен где-то храниться. Вы можете использовать команду «Terraform Refresh», чтобы обновить его или исправить в случае внешнего вмешательства, но вы не можете полностью восстановить файл состояния. Кроме того, состояние привязано к вашей среде, поэтому каждый раз, когда вы хотите развернуть другой экземпляр инфраструктуры, вам нужно будет управлять другим файлом состояния. С шаблонами ARM такой проблемы нет.

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

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

Преимущества Azure Resource Manager

Теперь давайте рассмотрим преимущества использования ARM. Есть 2 основных положительных момента:

Простой доступ к хранилищу ключей 

В нашем сравнении Azure ARM Templates vs Terraform первый из них имеет полезную функцию, которая позволяет вам напрямую ссылаться на Azure Keyvault при работе с ключами. Учетная запись развертывания имеет доступ к репозиторию, поэтому она извлекает и использует секретные данные из специальной связанной службы. У Terraform пока нет такой возможности.

Онлайн-портал поддержки Azure 

Поскольку шаблоны ARM являются специальным инструментом Azure IaC, они обеспечивают надежную поддержку пользователей в случае возникновения каких-либо проблем в рабочем процессе. Вы можете использовать портал Azure, чтобы отслеживать процесс развертывания, просматривать все предыдущие действия, проверять ошибки и т.д. И опять же, для Terraform такой службы пока нет.

Сравнение фич Azure ARM Templates и Terraform

Заключение

Конечно, при сравнении и выборе между Azure Resource Manager и Terraform вы должны учитывать свои особые требования. Для развертывания приложений в вашей созданной среде использование единого языка кодирования в нескольких облаках может быть достаточно удобным.

Однако это довольно специфическое решение, которое может не подходить для некоторых сценариев. Если вам нужно будет работать с несколькими облаками, стоит рассматривать опцию Terraform.

Кстати, руководство Microsoft заявляет, что его можно использовать вместе с Azure. А именно, у Dinarys есть подобный опыт, и он оказался успешным. Если вам нужна помощь специалиста - обращайтесь к нам.

Хотите узнать больше

Получите свежие статьи, новости и тематические исследования в первую очередь на вашу электронную почту

Теперь вы подписаны!