Iterace vlastností v šablonách ARM
V tomto článku se dozvíte, jak v šabloně Azure Resource Manager (šablona ARM) vytvořit více než jednu instanci vlastnosti. 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 nasazování. Vyhnete se také opakování syntaxe šablony.
Smyčku kopírování můžete použít pouze u prostředků nejvyšší úrovně, a to i při použití smyčky kopírování na vlastnost. Informace o změně podřízeného prostředku na prostředek nejvyšší úrovně najdete v tématu Iterace podřízeného prostředku.
Můžete také použít smyčku kopírování s prostředky, proměnnými a výstupy.
Tip
Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Smyčky.
Syntax
Přidáním elementu copy
do oddílu resources šablony nastavíte 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>
}
]
V poli name
zadejte 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.
Limity kopírování
Počet nesmí překročit 800.
Počet nemůže být záporné číslo. Pokud šablonu nasadíte pomocí nedávné verze Azure CLI, PowerShellu nebo rozhraní REST API, může být nulová. 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 vlastnosti
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, musíte zadat název iterace. Iterace vlastnosti 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 každý prvek v poli. Pomocí funkce length v poli určete počet iterací a copyIndex
načtěte aktuální index 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": {
}
}
Element 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žívat společně. Odkažte 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 vlastnosti.
Template (Šablona) | Description |
---|---|
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 kurz, 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 částech šablony, přečtěte si téma Vysvětlení struktury a syntaxe šablon ARM.
- Informace o nasazení šablony najdete v tématu Nasazení prostředků pomocí šablon ARM a Azure PowerShell.