Выходные значения в шаблонах ARM
Эта статья описывает, как объявлять выходные значения в шаблоне Azure Resource Manager (ARM). Выходные данные используются, когда нужно возвратить данные из развернутых ресурсов.
Формат каждого выходного значения должен разрешаться в один из типов данных.
Совет
Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Дополнительные сведения см. в разделе Выходные данные.
В шаблоне ограничено 64 выходных данных. Дополнительные сведения см. в разделе Ограничения шаблона.
Объявление выходных значений
В примере ниже показано, как вернуть свойство из развернутого ресурса.
Добавьте в шаблон раздел outputs
. В выходное значение записывается полное доменное имя для общедоступного IP-адреса.
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Если необходимо вывести свойство с дефисом в имени, вместо нотации с точками заключите имя в квадратные скобки. Например, используйте функцию ['property-name']
вместо .property-name
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"user": {
"user-name": "Test Person"
}
},
"resources": [
],
"outputs": {
"nameResult": {
"type": "string",
"value": "[variables('user')['user-name']]"
}
}
}
Условный вывод
Значение можно возвращать условно с помощью элемента condition
. Обычно условный вывод используется при условном развертывании ресурса. В примере ниже показано, как условно вернуть идентификатор ресурса для общедоступного IP-адреса в зависимости от того, был ли развернут новый адрес.
"outputs": {
"resourceID": {
"condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
Простой пример условного вывода см. в статье Шаблон условного вывода.
Динамическое число выходных значений
В некоторых сценариях при создании шаблона неизвестно число экземпляров значения, которое необходимо возвратить. Вы можете возвратить переменное число значений с помощью итеративного вывода. Добавьте элемент copy
для итерации по выходным значениям.
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
Дополнительные сведения см. в статье Итерация выходных данных в шаблонах ARM.
Связанные шаблоны
Можно развертывать взаимосвязанные шаблоны с помощью связанных шаблонов. Чтобы получить выходное значение из связанного шаблона, используйте функцию reference (ссылка) в родительском шаблоне. В родительском шаблоне применяется следующий синтаксис:
"[reference('<deploymentName>').outputs.<propertyName>.value]"
В примере ниже показано, как задать IP-адрес в подсистеме балансировки нагрузки, получив значение из связанного шаблона.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs.resourceID.value]"
}
Если имя свойства содержит дефис, вместо нотации с точками заключите имя в квадратные скобки.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}
Вы не можете использовать функцию reference
в разделе выходных данных вложенного шаблона. Чтобы извлечь значения для развернутого ресурса во вложенном шаблоне, преобразуйте этот шаблон в связанный.
Шаблон общедоступного IP-адреса создает общедоступный IP-адрес и выводит ИД ресурса. Шаблон подсистемы балансировки нагрузки ссылается на предыдущий шаблон. При создании подсистемы балансировки нагрузки он использует идентификатор ресурса в выходных данных.
Пример шаблона
Следующий шаблон не развертывает ресурсы. В нем показаны разные способы возврата выходных значений различных типов.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"stringOutput": {
"type": "string",
"value": "[deployment().name]"
},
"integerOutput": {
"type": "int",
"value": "[length(environment().authentication.audiences)]"
},
"booleanOutput": {
"type": "bool",
"value": "[contains(deployment().name, 'demo')]"
},
"arrayOutput": {
"type": "array",
"value": "[environment().authentication.audiences]"
},
"objectOutput": {
"type": "object",
"value": "[subscription()]"
}
}
}
Получение выходных значений
После успешного развертывания выходные значения автоматически возвращаются в его результатах.
Чтобы получить выходные значения из журнала развертывания, можно использовать сценарий.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Сортировка объектов в выходных данных
В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.
Следующие шаги
- Дополнительные сведения о доступных свойствах для выходных значений см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.