Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как создать несколько экземпляров свойства в шаблоне Azure Resource Manager (шаблон ARM). Добавив цикл копирования в раздел свойств ресурса в шаблоне, можно динамически задать количество элементов для свойства во время развертывания. Кроме того, не следует повторять синтаксис шаблона.
Цикл копирования можно использовать только с ресурсами верхнего уровня, даже при применении цикла копирования к свойству. Сведения об изменении дочернего ресурса на ресурс верхнего уровня см. в разделе "Итерация" для дочернего ресурса.
Можно также использовать цикл копирования с ресурсами, переменными и выходными данными.
Подсказка
Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Чтобы узнать больше, см. циклы.
Синтаксис
copy
Добавьте элемент в раздел ресурсов шаблона, чтобы задать количество элементов для свойства. Элемент copy имеет следующий общий формат:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
Для name
, укажите имя свойства ресурса, которое вы хотите создать.
Свойство count
указывает количество итераций, которые требуется для свойства.
Свойство input
указывает свойства, которые требуется повторить. Вы создаете массив элементов, созданных из значения в свойстве input
.
Ограничения копирования
Число не может превышать 800.
Число не может быть отрицательным числом. Это может быть нулевым, если вы развертываете шаблон с помощью последней версии Azure CLI, PowerShell или REST API. В частности, необходимо использовать следующее:
- Azure PowerShell 2.6 или более поздней версии
- Azure CLI 2.0.74 или более поздней версии
- REST API версии 2019-05-10 или более поздней
- Связанные развертывания должны использовать API версии 2019-05-10 или более поздней для типа ресурса развертывания.
Более ранние версии PowerShell, CLI и REST API не поддерживают ноль для подсчета.
Итерация свойств
В следующем примере показано, как применить цикл копирования к dataDisks
свойству на виртуальной машине:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"numberOfDataDisks": {
"type": "int",
"minValue": 0,
"maxValue": 16,
"defaultValue": 3,
"metadata": {
"description": "The number of dataDisks to create."
}
},
...
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
...
"properties": {
"storageProfile": {
...
"copy": [
{
"name": "dataDisks",
"count": "[parameters('numberOfDataDisks')]",
"input": {
"lun": "[copyIndex('dataDisks')]",
"createOption": "Empty",
"diskSizeGB": 1023
}
}
]
}
...
}
}
]
}
Обратите внимание, что при использовании copyIndex внутри итерации свойства необходимо указать имя итерации. Итерация свойств также поддерживает аргумент смещения. Смещение должно следовать после имени итерации, например copyIndex('dataDisks', 1)
.
Развернутый шаблон становится следующим:
{
"name": "examplevm",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2020-06-01",
"properties": {
"storageProfile": {
"dataDisks": [
{
"lun": 0,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 1,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 2,
"createOption": "Empty",
"diskSizeGB": 1023
}
],
...
Операция копирования полезна при работе с массивами, так как вы можете выполнять итерацию по каждому элементу в массиве. Используйте функцию длины массива, чтобы указать количество итерации и copyIndex
получить текущий индекс в массиве.
В следующем примере шаблона создается группа отказоустойчивости для баз данных, переданных в виде массива.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"primaryServerName": {
"type": "string"
},
"secondaryServerName": {
"type": "string"
},
"databaseNames": {
"type": "array",
"defaultValue": [
"mydb1",
"mydb2",
"mydb3"
]
}
},
"variables": {
"failoverName": "[format('{0}/{1}failovergroups', parameters('primaryServerName'), parameters('primaryServerName'))]"
},
"resources": [
{
"type": "Microsoft.Sql/servers/failoverGroups",
"apiVersion": "2015-05-01-preview",
"name": "[variables('failoverName')]",
"properties": {
"readWriteEndpoint": {
"failoverPolicy": "Automatic",
"failoverWithDataLossGracePeriodMinutes": 60
},
"readOnlyEndpoint": {
"failoverPolicy": "Disabled"
},
"partnerServers": [
{
"id": "[resourceId('Microsoft.Sql/servers', parameters('secondaryServerName'))]"
}
],
"copy": [
{
"name": "databases",
"count": "[length(parameters('databaseNames'))]",
"input": "[resourceId('Microsoft.Sql/servers/databases', parameters('primaryServerName'), parameters('databaseNames')[copyIndex('databases')])]"
}
]
}
}
],
"outputs": {
}
}
Элемент copy
является массивом, поэтому для ресурса можно указать несколько свойств.
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2017-10-01",
"name": "exampleLB",
"properties": {
"copy": [
{
"name": "loadBalancingRules",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
},
{
"name": "probes",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
}
]
}
}
Вы можете совместно использовать итерации ресурсов и свойств. Ссылка на итерацию свойства по имени.
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2018-04-01",
"name": "[format('{0}{1}', parameters('vnetname'), copyIndex())]",
"copy":{
"count": 2,
"name": "vnetloop"
},
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('addressPrefix')]"
]
},
"copy": [
{
"name": "subnets",
"count": 2,
"input": {
"name": "[format('subnet-{0}', copyIndex('subnets'))]",
"properties": {
"addressPrefix": "[variables('subnetAddressPrefix')[copyIndex('subnets')]]"
}
}
}
]
}
}
Образцы шаблонов
В следующем примере показан распространенный сценарий создания нескольких значений для свойства.
Шаблон | Описание |
---|---|
Развертывание виртуальной машины с переменным количеством дисков данных | Развертывает несколько дисков данных с виртуальной машиной. |
Дальнейшие шаги
- Чтобы пройти учебное пособие, ознакомьтесь с Учебник: Создание нескольких экземпляров ресурсов с помощью шаблонов ARM.
- Дополнительные сведения о применении цикла копирования см. в следующих источниках:
- Если вы хотите узнать о разделах шаблона, ознакомьтесь со сведениями о структуре и синтаксисе шаблонов ARM.
- Сведения о развертывании шаблона см. в статье "Развертывание ресурсов с помощью шаблонов ARM и Azure PowerShell".