Variabel iteration i ARM-mallar
Den här artikeln visar hur du skapar fler än ett värde för en variabel i din Azure Resource Manager-mall (ARM-mall). Genom att lägga till elementet copy
i variabelavsnittet i mallen kan du dynamiskt ange antalet objekt för en variabel under distributionen. Du kan också undvika att behöva upprepa mallsyntaxen.
Du kan också använda kopiera med resurser, egenskaper i en resurs och utdata.
Dricks
Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i loopar.
Syntax
Kopieringselementet har följande allmänna format:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
Egenskapen name
är ett värde som identifierar loopen. Egenskapen count
anger hur många iterationer du vill ha för variabeln.
Egenskapen input
anger de egenskaper som du vill upprepa. Du skapar en matris med element som skapats från värdet i egenskapen input
. Det kan vara en enskild egenskap (t.ex. en sträng) eller ett objekt med flera egenskaper.
Kopieringsgränser
Antalet får inte överstiga 800.
Antalet får inte vara ett negativt tal. Det kan vara noll om du distribuerar mallen med en ny version av Azure CLI, PowerShell eller REST API. Mer specifikt måste du använda:
- Azure PowerShell 2.6 eller senare
- Azure CLI 2.0.74 eller senare
- REST API version 2019-05-10 eller senare
- Länkade distributioner måste använda API-version 2019-05-10 eller senare för distributionsresurstypen
Tidigare versioner av PowerShell, CLI och REST API stöder inte noll för antal.
Variabel iteration
I följande exempel visas hur du skapar en matris med strängvärden:
{
"$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')]"
}
}
}
Föregående mall returnerar en matris med följande värden:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
I nästa exempel visas hur du skapar en matris med objekt med tre egenskaper - name
, diskSizeGB
och 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')]"
}
}
}
Föregående exempel returnerar en matris med följande värden:
[
{
"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
}
]
Kommentar
Variabel iteration stöder ett offsetargument. Förskjutningen måste komma efter namnet på iterationen, till exempel copyIndex('diskNames', 1)
. Om du inte anger ett förskjutningsvärde är standardvärdet 0 för den första instansen.
Du kan också använda elementet copy
i en variabel. I följande exempel skapas ett objekt som har en matris som ett av dess värden.
{
"$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')]"
}
}
}
Föregående exempel returnerar ett objekt med följande värden:
{
"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
}
]
}
I nästa exempel visas de olika sätt som du kan använda copy
med variabler.
{
"$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"
}
}
}
Exempelmallar
I följande exempel visas vanliga scenarier för att skapa fler än ett värde för en variabel.
Mall | beskrivning |
---|---|
Kopiera variabler | Visar de olika sätten att iterera på variabler. |
Flera säkerhetsregler | Distribuerar flera säkerhetsregler till en nätverkssäkerhetsgrupp. Den konstruerar säkerhetsreglerna från en parameter. Parametern finns i flera NSG-parameterfiler. |
Kopiera lagring med variabler | Exempel på hur du itererar en variabel och skapar flera lagringskonton. |
Nästa steg
- Om du vill gå igenom en självstudie kan du läsa Självstudie: Skapa flera resursinstanser med ARM-mallar.
- Andra användningar av kopieringselementet finns i:
- Om du vill lära dig mer om avsnitten i en mall kan du läsa Förstå strukturen och syntaxen för ARM-mallar.
- Information om hur du distribuerar mallen finns i Distribuera resurser med ARM-mallar och Azure PowerShell.