Упражнение. Добавление параметров и выходных данных в шаблон Azure Resource Manager
В этом упражнении вы добавите параметр для указания имени учетной записи хранения Azure во время развертывания. Затем вы добавите параметр, чтобы определить, какие номера SKU учетной записи хранения разрешены, и определите, какой из них следует использовать для этого развертывания. Вы также добавите полезность в шаблон Azure Resource Manager (шаблон ARM), добавив выходные данные, которые можно использовать позже в процессе развертывания.
Создание параметров для шаблона ARM
Сделайте шаблон ARM более гибким, добавив параметры, которые можно задавать во время выполнения. Создайте параметр для значения storageName
.
В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте parameters. Выглядит следующим образом:
"parameters":{},
Нажмите клавишу ВВОД и введите par. Появится список связанных фрагментов кода. Выберите новый параметр, который добавляет универсальный параметр в шаблон. Этот пример выглядит следующим образом:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
Измените параметр с parameter1 на storageName и оставьте тип строкой. Для параметра minLength укажите значение 3, а для параметра maxLength — 24. Добавьте в описание имя ресурса службы хранилища Azure.
Теперь блок параметров должен выглядеть следующим образом:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
Используйте этот новый параметр в блоке
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": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
Сохраните файл.
Развертывание параметризованного шаблона 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}
Проверка развертывания
По завершении развертывания вернитесь к портал Azure в браузере. Перейдите в свою группу ресурсов. Вы видите, что теперь в ней указаны 3 успешных развертывания. Нажмите эту ссылку.
Обратите внимание, что в списке присутствуют все три развертывания.
Исследуйте развертывание addnameparameter, как вы уже делали ранее.
Добавление другого параметра, ограничивающего допустимые значения
Теперь вы будете использовать параметры для ограничения значений, разрешенных для параметра.
Поместите курсор после закрывающей фигурной скобки параметра
storageName
. Добавьте запятую и нажмите клавишу ВВОД.Снова введите par и выберите new-parameter.
Измените новый универсальный параметр на следующий код:
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
Здесь вы перечисляете значения, которые позволяет этот параметр. Если шаблон выполняется со значением, которое не разрешено, развертывание завершается сбоем.
Добавьте в этот параметр какой-нибудь комментарий.
Шаблоны ARM поддерживают комментарии
//
и/* */
.Обновите параметр 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": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]" } } ], "outputs": {} }
Сохраните файл.
Развертывание шаблона ARM
В данном случае вы выполните развертывание с помощью параметра storageSKU
, который входит в список разрешенных. Затем вы попытаетесь развернуть шаблон с помощью storageSKU
параметра, который не указан в списке разрешенных. Второе развертывание завершается ошибкой, как ожидалось.
Разверните шаблон, выполнив следующие команды. Укажите уникальное имя для параметра
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.
Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра
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}
Это развертывание завершается неудачно. Обратите внимание на ошибку.
Разверните шаблон, выполнив следующие команды. Укажите уникальное имя для параметра
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.
Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра
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
Это развертывание завершается неудачно. Обратите внимание на ошибку.
Добавление выходных данных в шаблон ARM
Теперь добавим в шаблон ARM раздел outputs
, куда будут выводиться конечные точки для ресурса учетной записи хранения.
В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте выходных данных
"outputs":{},
.Нажмите клавишу ВВОД, а затем введите . Вы получите список связанных фрагментов кода. Выберите new-output. Он добавляет универсальные выходные данные в шаблон, который выглядит следующим образом:
"outputs": { "output1": { "type": "string", "value": "value" }
Измените значение output1 на storageEndpoint, а затем измените значение
type
объекта. Измените значениеvalue
"[reference(parameters('storageName'))).primaryEndpoints]". Это выражение мы обсуждали в предыдущем модуле — оно получает данные конечных точек. Так как мы указали объект в качестве типа, он возвращает объект в формате JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
Сохраните файл.
Развертывание шаблона ARM с выходными данными
Теперь развернем шаблон и посмотрим на выходные данные конечных точек в формате JSON. Вам нужно указать уникальное имя для параметра storageName
. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В этом случае Azure обновляет ресурс вместо создания нового.
Разверните шаблон, выполнив следующие команды. Обязательно замените {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}
Обратите внимание на результат.
Разверните шаблон, выполнив следующие команды. Обязательно замените {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
Обратите внимание на результат.
Проверка развертывания выходных данных
На портале Azure перейдите в свое развертывание addOutputs. Вы видите, что теперь отображаются и выходные данные.