Упражнение. Добавление параметров и выходных данных в шаблон Azure Resource Manager

Завершено

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

Создание параметров для шаблона ARM

Здесь вы сделаете шаблон ARM более гибким, добавив параметры, которые можно задать во время выполнения. Создайте параметр для значения storageName.

  1. В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте parameters. Выглядит следующим образом: "parameters":{},

  2. Нажмите клавишу ВВОД и введите par. Появится список связанных фрагментов кода. Выберите новый параметр, который добавляет универсальный параметр в шаблон. Он будет выглядеть примерно так:

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. Измените параметр на параметр 1на storageName и оставьте тип строкой. Для параметра minLength укажите значение 3, а для параметра maxLength — 24. Добавьте в описание имя ресурса службы хранилища Azure.

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

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. Используйте этот новый параметр в блоке resources в значениях name и displayName. Весь файл должен выглядеть следующим образом.

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Сохраните файл.

Развертывание параметризованного шаблона ARM

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

В терминале выполните следующие команды Azure CLI. Вы уже использовали этот фрагмент кода ранее, но имя развертывания изменилось. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем модуле. В таком случае Azure обновит ресурс, а не создаст новый.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

В терминале выполните следующие команды Azure PowerShell. Вы уже использовали этот фрагмент кода ранее, но имя развертывания изменилось. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем модуле. В таком случае Azure обновит ресурс, а не создаст новый.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

Проверка развертывания

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

    Обратите внимание, что в списке присутствуют все три развертывания.

  2. Исследуйте развертывание addnameparameter, как вы уже делали ранее.

Добавление параметра для ограничения разрешенных значений

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

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

  2. Снова введите par и выберите new-parameter.

  3. Измените новый универсальный параметр следующим образом:

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

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

  4. Добавьте в этот параметр какой-нибудь комментарий.

    Screenshot of the azuredeploy.json file showing the comment This is the allowed values for an Azure storage account in the line preceding the storageSKU parameter.

    Шаблоны ARM поддерживают комментарии // и /* */.

  5. Обновите параметр resources так, чтобы он использовал параметр storageSKU. Чтобы упростить выполнение этого шага, воспользуйтесь функцией IntelliSense в Visual Studio Code.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    Весь файл должен выглядеть следующим образом.

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Сохраните файл.

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

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

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

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

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

  2. Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра storageSKU изменено на Basic. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В таком случае Azure обновит ресурс, а не создаст новый.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    Это развертывание завершается неудачно. Обратите внимание на ошибку.

    Screenshot of the Terminal window showing the deployment validation error.

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

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

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

  2. Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра storageSKU изменено на Basic. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В таком случае Azure обновит ресурс, а не создаст новый.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    Это развертывание завершается неудачно. Обратите внимание на ошибку.

    Screenshot of the Terminal window showing the deployment validation error.

Добавление выходных данных в шаблон ARM

Здесь вы добавите в outputs раздел шаблона ARM, чтобы вывести конечные точки для ресурса учетной записи хранения.

  1. В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте выходных данных "outputs":{},.

  2. Нажмите клавишу ВВОД, а затем введите . Вы получите список связанных фрагментов. Выберите new-output. В шаблон будет добавлен универсальный блок выходных данных. Он будет выглядеть следующим образом.

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. Измените значение output1 на storageEndpoint, а затем измените значение typeобъекта. Измените значение value"[reference(parameters('storageName'))).primaryEndpoints]". Это выражение мы обсуждали в предыдущем модуле — оно получает данные конечных точек. Так как мы указали объект в качестве типа, он вернет объект в формате JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. Сохраните файл.

Развертывание шаблона ARM с выходными данными

Здесь вы развернете шаблон и увидите выходные данные конечных точек в формате JSON. Вам нужно указать уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В таком случае Azure обновит ресурс, а не создаст новый.

  1. Для развертывания шаблона выполните следующие команды. Обязательно замените {your-unique-name} на свою уникальную строку.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    Обратите внимание на результат.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

  1. Для развертывания шаблона выполните следующие команды. Обязательно замените {your-unique-name} на свою уникальную строку.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    Обратите внимание на результат.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

Проверка развертывания выходных данных

На портале Azure перейдите в свое развертывание addOutputs. Вы видите, что теперь отображаются и выходные данные.

Screenshot of the Azure portal showing the output selection in the left menu.