Iterace vlastností v šablonách ARM
Tento článek ukazuje, jak vytvořit více než jednu instanci vlastnosti v šabloně Azure Resource Manageru (šablona ARM). Přidáním smyčky kopírování do oddílu vlastností prostředku v šabloně můžete dynamicky nastavit počet položek pro vlastnost během nasazení. Nemusíte také opakovat syntaxi šablony.
Smyčku kopírování můžete použít pouze s prostředky nejvyšší úrovně, i když použijete smyčku kopírování u vlastnosti. Další informace o změně podřízeného prostředku na prostředek nejvyšší úrovně najdete v tématu Iterace podřízeného prostředku.
Smyčku kopírování můžete použít také s prostředky, proměnnými a výstupy.
Tip
Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete ve smyčce.
Syntaxe
copy
Přidejte prvek do oddílu resources šablony a nastavte počet položek pro vlastnost. Element copy má následující obecný formát:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
Zadejte name
název vlastnosti prostředku, kterou chcete vytvořit.
Vlastnost count
určuje počet iterací, které chcete pro vlastnost použít.
Vlastnost input
určuje vlastnosti, které chcete opakovat. Vytvoříte pole prvků vytvořených z hodnoty ve input
vlastnosti.
Omezení kopírování
Počet nesmí překročit 800.
Počet nemůže být záporné číslo. Pokud šablonu nasadíte pomocí nejnovější verze Azure CLI, PowerShellu nebo rozhraní REST API, může to být nula. Konkrétně musíte použít:
- Azure PowerShell 2.6 nebo novější
- Azure CLI 2.0.74 nebo novější
- Rozhraní REST API verze 2019-05-10 nebo novější
- Propojená nasazení musí pro typ prostředku nasazení používat rozhraní API verze 2019-05-10 nebo novější.
Starší verze PowerShellu, rozhraní příkazového řádku a rozhraní REST API nepodporují nulu pro počet.
Iterace vlastností
Následující příklad ukazuje, jak použít smyčku kopírování na dataDisks
vlastnost na virtuálním počítači:
{
"$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
}
}
]
}
...
}
}
]
}
Všimněte si, že při použití copyIndex uvnitř iterace vlastnosti je nutné zadat název iterace. Iterace vlastností také podporuje argument posunu. Posun musí pocházet za názvem iterace, například copyIndex('dataDisks', 1)
.
Nasazená šablona se stane:
{
"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
}
],
...
Operace kopírování je užitečná při práci s poli, protože můžete iterovat jednotlivé prvky v poli. Pomocí funkce délky v poli určete počet iterací a copyIndex
načtení aktuálního indexu v poli.
Následující příklad šablony vytvoří skupinu převzetí služeb při selhání pro databáze, které jsou předány jako pole.
{
"$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": {
}
}
Prvek copy
je pole, takže pro prostředek můžete zadat více než jednu vlastnost.
{
"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": {
...
}
}
]
}
}
Iterace prostředků a vlastností můžete použít společně. Odkazovat na iteraci vlastnosti podle názvu.
{
"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')]]"
}
}
}
]
}
}
Ukázkové šablony
Následující příklad ukazuje běžný scénář pro vytvoření více než jedné hodnoty pro vlastnost.
Template | Popis |
---|---|
Nasazení virtuálního počítače s proměnlivým počtem datových disků | Nasadí několik datových disků s virtuálním počítačem. |
Další kroky
- Pokud chcete projít kurzem, přečtěte si kurz: Vytvoření více instancí prostředků pomocí šablon ARM.
- Další použití smyčky kopírování najdete tady:
- Pokud se chcete dozvědět o oddílech šablony, přečtěte si téma Principy struktury a syntaxe šablon ARM.
- Informace o nasazení šablony najdete v tématu Nasazení prostředků pomocí šablon ARM a Azure PowerShellu.