Iterace proměnných v šablonách ARM
Tento článek ukazuje, jak vytvořit více než jednu hodnotu proměnné v šabloně Azure Resource Manageru (šablona ARM). copy
Přidáním prvku do oddílu proměnných šablony můžete dynamicky nastavit počet položek proměnné během nasazování. Nemusíte také opakovat syntaxi šablony.
Kopírování můžete použít také s prostředky, vlastnostmi v prostředku 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
Element copy má následující obecný formát:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
Vlastnost name
je libovolná hodnota, která identifikuje smyčku. Vlastnost count
určuje počet iterací, které chcete pro proměnnou použít.
Vlastnost input
určuje vlastnosti, které chcete opakovat. Vytvoříte pole prvků vytvořených z hodnoty ve input
vlastnosti. Může to být jedna vlastnost (například řetězec) nebo objekt s několika vlastnostmi.
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 proměnných
Následující příklad ukazuje, jak vytvořit pole řetězcových hodnot:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "stringArray",
"count": "[parameters('itemCount')]",
"input": "[concat('item', copyIndex('stringArray', 1))]"
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('stringArray')]"
}
}
}
Předchozí šablona vrátí pole s následujícími hodnotami:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
Další příklad ukazuje, jak vytvořit pole objektů se třemi vlastnostmi - name
, diskSizeGB
a diskIndex
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "objectArray",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('objectArray', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('objectArray')]"
}
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('objectArray')]"
}
}
}
Předchozí příklad vrátí matici s následujícími hodnotami:
[
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
Poznámka:
Iterace proměnných podporuje argument posunu. Posun musí pocházet za názvem iterace, například copyIndex('diskNames', 1)
. Pokud nezadáte hodnotu posunu, výchozí hodnota je 0 pro první instanci.
Můžete také použít copy
prvek v rámci proměnné. Následující příklad vytvoří objekt, který má pole jako jednu z jejích hodnot.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"topLevelObject": {
"sampleProperty": "sampleValue",
"copy": [
{
"name": "disks",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('disks', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('disks')]"
}
}
]
}
},
"resources": [],
"outputs": {
"objectResult": {
"type": "object",
"value": "[variables('topLevelObject')]"
}
}
}
Předchozí příklad vrátí objekt s následujícími hodnotami:
{
"sampleProperty": "sampleValue",
"disks": [
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
}
Následující příklad ukazuje různé způsoby použití copy
s proměnnými.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {
"disk-array-on-object": {
"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": "top-level-object-array",
"count": 5,
"input": {
"name": "[concat('myDataDisk', copyIndex('top-level-object-array', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('top-level-object-array')]"
}
},
{
"name": "top-level-string-array",
"count": 5,
"input": "[concat('myDataDisk', copyIndex('top-level-string-array', 1))]"
},
{
"name": "top-level-integer-array",
"count": 5,
"input": "[copyIndex('top-level-integer-array')]"
}
]
},
"resources": [],
"outputs": {
"exampleObject": {
"value": "[variables('disk-array-on-object')]",
"type": "object"
},
"exampleArrayOnObject": {
"value": "[variables('disk-array-on-object').disks]",
"type" : "array"
},
"exampleObjectArray": {
"value": "[variables('top-level-object-array')]",
"type" : "array"
},
"exampleStringArray": {
"value": "[variables('top-level-string-array')]",
"type" : "array"
},
"exampleIntegerArray": {
"value": "[variables('top-level-integer-array')]",
"type" : "array"
}
}
}
Ukázkové šablony
Následující příklady ukazují běžné scénáře pro vytvoření více hodnot pro proměnnou.
Template | Popis |
---|---|
Kopírování proměnných | Demonstruje různé způsoby iterace proměnných. |
Více pravidel zabezpečení | Nasadí několik pravidel zabezpečení do skupiny zabezpečení sítě. Vytvoří pravidla zabezpečení z parametru. Informace o parametru najdete v několika souborech parametrů NSG. |
Kopírování úložiště s proměnnými | Příklad postupu iterace proměnné a vytvoření více účtů úložiště |
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í elementu copy 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.