Что такое шаблоны ARM?

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

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

Чтобы реализовать инфраструктуру в качестве кода для решений Azure, используйте шаблоны Azure Resource Manager (шаблоны ARM). Шаблон является файлом нотации объектов JavaScript (JSON), определяющим инфраструктуру и конфигурацию вашего проекта. Шаблон использует декларативный синтаксис, который позволяет указать объект, который вы собираетесь развернуть. При этом, для развертывания объекта, не нужно писать последовательность команд. В шаблоне указывают ресурсы для развертывания, а также свойства этих ресурсов. Можно также указать, в какой группе ресурсов будут развернуты эти ресурсы.

Совет

Мы представили новый язык Bicep, который предлагает те же возможности, что и шаблоны ARM, но имеет более простой в использовании синтаксис. Во время развертывания каждый файл Bicep автоматически преобразуется в шаблон ARM. Если вы рассматриваете инфраструктуру в качестве параметров кода, рекомендуем Bicep. Дополнительные сведения см. в статье Что такое Bicep.

Чтобы узнать, как приступить к работе с шаблонами ARM, просмотрите следующий видеоролик.

Почему выбирают шаблоны ARM?

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

  • Декларативный синтаксис. Шаблоны ARM позволяют декларативно создавать и развертывать всю инфраструктуру Azure. Например, можно развернуть не только виртуальные машины, но и сетевую инфраструктуру, системы хранения и другие ресурсы, которые могут потребоваться.

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "mystore": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-04-01",
      "name": "mystorageaccount",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  }
}
  • Оркестрация. Не следует беспокоиться о сложности операций упорядочивания. Resource Manager организует развертывание взаимозависимых ресурсов так, чтобы они создавались в правильном порядке. По возможности Resource Manager развертывает ресурсы параллельно, поэтому процедуры развертывания заканчиваются быстрее, чем в случае последовательного развертывания. Шаблон развертывается с помощью одной команды, а не путем выполнения нескольких императивных команд.

    Схема, показывающая разницу между императивным и декларативным развертыванием.

  • Модульные файлы. Шаблоны можно разбить на более мелкие, многократно используемые компоненты и связать их в процессе развертывания. Также можно вложить один шаблон в другой.

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

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

  • Тестирование. Можно убедиться в том, что шаблон соответствует рекомендациям, проверив его с помощью набора средств для шаблонов ARM (arm-ttk). Этот тестовый набор является сценарием PowerShell, который можно загрузить на сайте GitHub. Набор средств позволяет упростить разработки с помощью языка шаблона.

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

  • Встроенная проверка. Шаблон развертывается только после прохождения проверки. Resource Manager проверяет шаблон перед началом развертывания, чтобы убедиться в успешном выполнении процесса. После этого уменьшается вероятность остановки развертывания в незавершенном состоянии.

  • Отслеживаемые развертывания. На портале Microsoft Azure можно просмотреть журнал развертывания и получить информацию о шаблоне развертывания. Можно просмотреть развернутый шаблон, переданные значения параметров и любые выходные значения. На портале невозможно отслеживать другие инфраструктуры, например службы кода.

    Снимок экрана: портал Azure с журналом развертывания.

  • Политика как код. Политика Azure — это политика, которая используется как платформа кода для автоматизации управления. Если используются политики Azure, исправление политики выполняется на несовместимых ресурсах при развертывании с помощью шаблонов.

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

  • Интеграция CI/CD. Кроме того, шаблоны можно интегрировать в инструменты непрерывной интеграции и непрерывного развертывания (CI/CD), с помощью которых можно автоматизировать конвейеры выпуска для быстрых и надежных обновлений приложений и инфраструктуры. Выполняя задачу шаблона Azure DevOps и Resource Manager, можно использовать Azure Pipelines для непрерывной сборки и развертывания проектов шаблонов ARM. Дополнительные сведения см. в статье Проект VS с конвейерами и учебнике Непрерывная интеграция шаблонов Azure Resource Manager с Azure Pipelines.

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

  • Средства разработки. Шаблоны можно создавать с помощью Visual Studio Code и расширения средства шаблонов. Вы получаете технологию IntelliSense, выделение синтаксиса, встроенную справку и множество других функций языка. В дополнение к Visual Studio Code можно использовать Visual Studio.

Файл шаблона

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

Шаблон состоит из разделов, описанных ниже.

  • Параметры. Указывает значения для процесса развертывания, которые позволяют использовать один и тот же шаблон в различных средах.

  • Переменные. Определяет значения, которые повторно используются в шаблонах. Их можно сформировать на основе значений параметров.

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

  • Ресурсы. Указывает ресурсы для развертывания.

  • Выходные данные. Возвращает значения из развернутых ресурсов.

Процесс развертывания шаблона

При развертывании шаблона Resource Manager преобразует шаблон в операции REST API. Например, Resource Manager получает шаблон со следующим определением ресурса:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

В таком случае Resource Manager преобразует определение в операцию REST API, которая отправляется поставщику ресурсов Microsoft.Storage:

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

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

Для развертывания шаблона можно использовать любой из нижеуказанных вариантов.

Конструктор шаблонов

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

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

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

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

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

Схема, показывающая развертывание трехуровневого приложения с отдельными группами ресурсов.

Дополнительные сведения см. в статье Использование связанных шаблонов в Azure Resource Manager.

Общие шаблоны

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

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

Поддержка

Ниже приведены шаги по открытию запроса в службу поддержки для проблем, связанных с шаблоном Azure Resource Manager (ARM):

  1. Откройте портал Azure.

  2. Щелкните значок "Поддержка и устранение неполадок" в правом верхнем углу.

  3. В кратком описании проблемы введите шаблон ARM и нажмите кнопку "Перейти".

  4. В какой службе возникла проблема?выберите портал в разделе "Мониторинг и управление", а затем нажмите кнопку "Далее".

  5. Выберите подписку и нажмите кнопку Далее.

  6. Выберите "Проблема с шаблонами ARM" и нажмите кнопку "Далее".

    Снимок экрана: запрос на поддержку шаблона ARM.

Следующие шаги