Исследование структуры шаблонов Azure Resource Manager

Завершено

В этом уроке вы узнаете об использовании шаблонов Azure Resource Manager (шаблонов ARM) для реализации инфраструктуры в качестве кода. Вы изучите разделы шаблона ARM, узнайте, как развернуть шаблон ARM в Azure и подробно ознакомиться с разделом ресурсов шаблона ARM.

Что такое "Инфраструктура как код"?

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

Используя концепцию "Инфраструктура как код", вы можете поддерживать и код приложения, и все, что вам нужно для развертывания приложения в центральном репозитории кода. Преимущества концепции "Инфраструктура как код"

  • Согласованные конфигурации
  • Улучшенная масштабируемость
  • Более быстрые развертывания
  • Улучшенные возможности трассировки

Это видео объясняет инфраструктуру как код:

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

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

Шаблоны ARM позволяют объявлять, что вы собираетесь развертывать, без необходимости написания последовательности команд для создания развертывания. В шаблоне ARM вы указываете ресурсы и свойства этих ресурсов. Затем Azure Resource Manager использует эти сведения для развертывания ресурсов в упорядоченном и согласованном режиме.

Преимущества использования шаблонов ARM

Шаблоны ARM позволяют автоматизировать развертывание и использовать концепцию инфраструктуры как кода (IaC). Код шаблона становится частью вашей инфраструктуры и проектов разработки. Аналогично коду приложения вы можете хранить файлы IaC в исходном репозитории и управлять их версиями.

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

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

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

В Resource Manager также имеется встроенная проверка, и перед началом развертывания выполняется проверка шаблона для уверенности в успешности развертывания.

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

На портале Azure можно просматривать журнал развертывания и получать информацию о состоянии развертывания. На портале отображаются значения всех параметров и выходных данных.

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

Структура файла шаблона ARM

При написании шаблона ARM необходимо понять все части, составляющие шаблон и то, что они делают. Файлы шаблонов ARM состоят из следующих элементов:

Элемент Description
schema обязательный раздел, который определяет расположение файла схемы JSON, описывающего структуру данных JSON. Номер используемой вами версии зависит от области развертывания и вашего редактора JSON.
contentVersion обязательный раздел, который определяет версию вашего шаблона (например, 1.0.0.0). Вы можете использовать это значение для документирования существенных изменений в вашем шаблоне, чтобы выбирать правильный шаблон для развертывания.
apiProfile необязательный раздел, который определяет коллекцию версий API для типов ресурсов. Вы можете использовать это значение, чтобы не указывать версии API для каждого ресурса в шаблоне.
parameters необязательный раздел, в котором определяются значения, предоставляемые во время развертывания. Эти значения могут предоставляться с помощью файла параметров, параметров командной строки или на портале Azure.
variables необязательный раздел, где определяются значения, которые используются для упрощения выражений языка шаблона.
functions необязательный раздел, где можно определить пользовательские функции, доступные в шаблоне. Пользовательские функции могут упростить шаблон, если в нем многократно используются сложные выражения.
resources обязательный раздел, где определяются фактические элементы, которые вы хотите развернуть или обновить в группе ресурсов или подписке.
выходные данные необязательный раздел, где указываются значения, которые будут возвращаться в конце развертывания.

Развертывание шаблона ARM в Azure

Шаблон ARM можно развернуть в Azure одним из следующих способов:

  • Развертывание локального шаблона
  • Развертывание связанного шаблона
  • Развертывание в конвейере непрерывного развертывания

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

Для развертывания локального шаблона требуется локально установленный Azure PowerShell или Azure CLI.

Сначала выполните вход в Azure через Azure CLI или Azure PowerShell.

az login

Затем определите группу ресурсов. Можно использовать уже определенную группу ресурсов или создать новую с помощью следующей команды. Доступные значения расположения можно получить с помощью команд: az account list-locations (CLI) или Get-AzLocation (PowerShell). Расположение по умолчанию можно настроить с помощью az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Чтобы начать развертывание шаблона в группе ресурсов, используйте команду az deployment group create Azure CLI или команду New-AzResourceGroupDeployment Azure PowerShell.

Совет

Разница между az deployment group create и заключается в том, что az group deployment create является старой командой, которая будет устарела и будет замененаaz deployment group createaz group deployment create. Поэтому рекомендуется развертывать az deployment group create ресурсы в группе ресурсов область.

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

Для выполнения этой команды развертывания у вас должна быть установлена ​​последняя версия Azure CLI.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

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

Конвейер CI/CD автоматизирует создание и развертывание проектов разработки, включая проекты шаблонов ARM. Чаще всего для развертывания шаблонов используются два конвейера — Azure Pipelines и GitHub Actions.

Дополнительные сведения об этих двух типах развертывания представлены ​​в других модулях.

Добавление ресурсов в шаблон

Чтобы добавить ресурс в шаблон, вам нужно знать поставщик ресурса и его типы ресурсов. Синтаксис этой комбинации имеет вид {поставщик-ресурса}/{тип-ресурса}. Например, для добавления в шаблон учетной записи хранения вам потребуется поставщик ресурсов Microsoft.Storage. Одним из типов для этого поставщика является storageAccount. Таким образом, ваш тип ресурса будет отображаться следующим образом: Microsoft.Storage/storageAccounts. Для поиска нужных поставщиков вы можете использовать список поставщиков ресурсов для служб Azure.

Определив поставщика и тип ресурса, разберитесь в свойствах всех типов ресурсов, которые вы хотите использовать. Дополнительные сведения см. в статье Определение ресурсов в шаблонах Azure Resource Manager Найдите ресурс в списке в расположенном слева столбце. Обратите внимание, что свойства отсортированы по версии API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

В следующем примере показаны некоторые свойства со страницы "Учетные записи хранения".

Screenshot of a Microsoft documentation page showing some of the storage account properties.

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}