Руководство по добавлению параметров в шаблон ARM

В предыдущем упражнении вы научились добавлять в шаблон учетную запись хранения Azure и развертывать его. Из этого учебника вы узнаете, как улучшить шаблон Azure Resource Manager (ARM), добавив в него параметры. Для выполнения этой инструкции потребуется около 14 минут.

Предварительные требования

Советуем выполнить инструкции из учебника по ресурсам, но это необязательно.

Вам потребуется установить Visual Studio Code с расширением инструментов Resource Manager, а также либо Azure PowerShell, либо интерфейс командной строки Azure (Azure CLI). Дополнительные сведения см. в разделе об инструментах шаблона.

Проверка шаблона

В конце предыдущего упражнения шаблон содержал следующий файл JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "{provide-unique-name}",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

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

Изменение шаблона для повторного использования

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

Скопируйте весь файл и замените шаблон на его содержимое.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

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

Давайте развернем шаблон. В следующем примере шаблон развертывается с помощью Azure CLI или PowerShell. Обратите внимание: вы указываете имя учетной записи хранения в качестве одного из значений в команде развертывания. Для имени учетной записи хранения укажите то же имя, которое вы использовали в предыдущем учебнике.

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

New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

Концепция обновления ресурсов

После развертывания учетной записи хранения с тем же именем, что и раньше, может возникнуть вопрос о том, как повторное развертывание влияет на ресурс.

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

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

Настройка с учетом среды

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

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

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

Теперь все готово к повторному развертыванию. Так как номер SKU по умолчанию имеет значение Standard_LRS, вы уже указали значение параметра.

New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

Примечание

Если развертывание завершается сбоем, используйте параметр verbose, чтобы получить сведения о создаваемых ресурсах. Используйте параметр debug, чтобы получить дополнительные сведения для отладки.

Чтобы убедиться в гибкости шаблона, давайте снова его развернем. На этот раз задайте для параметра SKU стандартное геоизбыточное хранилище (GRS) Standard_GRS. Вы можете передать новое имя, чтобы создать другую учетную запись хранения, или использовать то же имя, чтобы обновить имеющуюся учетную запись хранения. Оба варианта работают.

New-AzResourceGroupDeployment `
  -Name usenondefaultsku `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU Standard_GRS

Наконец, давайте запустим еще один тест и посмотрим, что произойдет, если вы передадите номер SKU, который не входит в список допустимых значений. В этом случае мы проверяем сценарий, в котором пользователь шаблона считает, что базовым является одним из номеров SKU.

New-AzResourceGroupDeployment `
  -Name testskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU basic

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

Очистка ресурсов

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

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

  1. На портале Azure в меню слева выберите Группа ресурсов.
  2. Введите имя группы ресурсов в текстовом поле Фильтрация всех полей....
  3. Установите флажок рядом с myResourceGroup и выберите myResourceGroup или имя вашей группы ресурсов.
  4. В главном меню выберите Удалить группу ресурсов.

Дальнейшие действия

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