Iterace proměnných v šablonách ARM
V tomto článku se dozvíte, jak vytvořit více než jednu hodnotu pro proměnnou v šabloně Azure Resource Manager (šablona ARM). Přidáním elementu copy
do oddílu variables šablony můžete dynamicky nastavit počet položek pro proměnnou během nasazení. Vyhnete se také opakování syntaxe š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é funkce jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Smyčky.
Syntax
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.
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 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é podporuje argument posunu. Posun musí pocházet za názvem iterace, například copyIndex('diskNames', 1)
. Pokud nezadáte hodnotu posunu, pro první instanci se ve výchozím nastavení nastaví hodnota 0.
Můžete také použít copy
prvek v proměnné. Následující příklad vytvoří objekt, který má pole jako jednu ze svý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
}
]
}
Další 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 vytvoření více než jedné hodnoty pro proměnnou.
Template (Šablona) | Description |
---|---|
Kopírování proměnných | Ukazuje 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. Parametr najdete v několika souborech parametrů NSG. |
Kopírování úložiště s proměnnými | Příklad iterace proměnné a vytvoření více účtů úložiště |
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í elementu copy 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.