Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как определить и использовать переменные в шаблоне Azure Resource Manager (шаблон ARM). Переменные используются для упрощения шаблона. Вместо того чтобы повторять сложные выражения по всему шаблону, необходимо определить переменную, содержащую сложное выражение. Затем вы используете эту переменную по мере необходимости во всем шаблоне.
Resource Manager разрешает переменные перед началом операций развертывания. Где переменная используется в шаблоне, Resource Manager заменяет ее разрешенным значением.
Подсказка
Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Чтобы узнать больше, см. Переменные.
В шаблоне может быть не более 256 переменных. Дополнительные сведения см. в разделе Ограничения шаблона.
Определение переменной
При определении переменной вы не указываете тип данных для переменной. Вместо этого укажите значение или шаблонное выражение. Тип переменной выводится из разрешенного значения. В следующем примере переменной присваивается строка.
"variables": {
"stringVar": "example value"
},
Для создания переменной можно использовать значение из параметра или другой переменной.
"parameters": {
"inputValue": {
"defaultValue": "deployment parameter",
"type": "string"
}
},
"variables": {
"stringVar": "myVariable",
"concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
"concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]"
}
Для создания значения переменной можно использовать функции шаблона .
В следующем примере создается строковое значение для имени учетной записи хранения. Он использует несколько функций шаблона для получения значения параметра и объединяет его в уникальную строку.
"variables": {
"storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},
Вы не можете использовать функцию ссылки или любую из функций списка в объявлении переменной. Эти функции получают состояние ресурса во время выполнения и не могут быть выполнены до развертывания, когда переменные разрешены.
Использовать переменную
В следующем примере показано, как использовать переменную для свойства ресурса.
Чтобы получить ссылку на значение переменной, используйте функцию variables .
"variables": {
"storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
...
}
]
Пример шаблона
Следующий шаблон не развертывает ресурсы. В ней показаны некоторые способы объявления переменных разных типов.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"inputValue": {
"defaultValue": "deployment parameter",
"type": "string"
}
},
"variables": {
"stringVar": "myVariable",
"concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
"concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]",
"arrayVar": [
1,
2,
3,
4
],
"objectVar": {
"property1": "value1",
"property2": "value2"
},
"copyWithinVar": {
"copy": [
{
"name": "disks",
"count": 5,
"input": {
"name": "[concat('myDataDisk', copyIndex('disks', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('disks')]"
}
},
{
"name": "diskNames",
"count": 5,
"input": "[concat('myDataDisk', copyIndex('diskNames', 1))]"
}
]
},
"copy": [
{
"name": "topLevelCopy1",
"count": 5,
"input": {
"name": "[concat('oneDataDisk', copyIndex('topLevelCopy1', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('topLevelCopy1')]"
}
},
{
"name": "topLevelCopy2",
"count": 3,
"input": {
"name": "[concat('twoDataDisk', copyIndex('topLevelCopy2', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('topLevelCopy2')]"
}
},
{
"name": "topLevelCopy3",
"count": 4,
"input": "[concat('stringValue', copyIndex('topLevelCopy3'))]"
},
{
"name": "topLevelCopy4",
"count": 4,
"input": "[copyIndex('topLevelCopy4')]"
}
]
},
"resources": [],
"outputs": {
"stringOutput": {
"type": "string",
"value": "[variables('stringVar')]"
},
"concatToVariableOutput": {
"type": "string",
"value": "[variables('concatToVar')]"
},
"concatToParameterOutput": {
"type": "string",
"value": "[variables('concatToParam')]"
},
"arrayOutput": {
"type": "array",
"value": "[variables('arrayVar')]"
},
"arrayElementOutput": {
"type": "int",
"value": "[variables('arrayVar')[0]]"
},
"objectOutput": {
"type": "object",
"value": "[variables('objectVar')]"
},
"copyWithinVariableOutput": {
"type": "object",
"value": "[variables('copyWithinVar')]"
},
"topLevelCopyOutput1": {
"type": "array",
"value": "[variables('topLevelCopy1')]"
},
"topLevelCopyOutput2": {
"type": "array",
"value": "[variables('topLevelCopy2')]"
},
"topLevelCopyOutput3": {
"type": "array",
"value": "[variables('topLevelCopy3')]"
},
"topLevelCopyOutput4": {
"type": "array",
"value": "[variables('topLevelCopy4')]"
}
}
}
Переменные конфигурации
Вы можете определить переменные, содержащие связанные значения для настройки среды. Переменная определяется как объект со значениями. В следующем примере показан объект, содержащий значения для двух сред — test и prod. Передайте одно из этих значений во время развертывания.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"environmentName": {
"type": "string",
"allowedValues": [
"test",
"prod"
],
"metadata": {
"description": "Specify either test or prod for configuration values."
}
}
},
"variables": {
"environmentSettings": {
"test": {
"instanceSize": "Small",
"instanceCount": 1
},
"prod": {
"instanceSize": "Large",
"instanceCount": 4
}
}
},
"resources": [],
"outputs": {
"instanceSize": {
"value": "[variables('environmentSettings')[parameters('environmentName')].instanceSize]",
"type": "string"
},
"instanceCount": {
"value": "[variables('environmentSettings')[parameters('environmentName')].instanceCount]",
"type": "int"
}
}
}
Дальнейшие шаги
- Дополнительные сведения о доступных свойствах для переменных см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.
- Рекомендации по созданию переменных см. в разделе Рекомендации - переменные.
- Пример шаблона, который назначает правила безопасности группе безопасности сети, см. в разделе Правила безопасности сети и файл параметров.