Iteration av utdata i ARM-mallar
Den här artikeln visar hur du skapar fler än ett värde för utdata i din Azure Resource Manager-mall (ARM-mall). Genom att lägga till en kopieringsloop i utdataavsnittet i mallen kan du dynamiskt returnera ett antal objekt under distributionen.
Du kan också använda en kopieringsloop med resurser, egenskaper i en resurs och variabler.
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
Lägg till elementet copy
i utdataavsnittet i mallen för att returnera ett antal objekt. Kopieringselementet har följande allmänna format:
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-output>
}
Egenskapen count
anger antalet iterationer som du vill använda för utdatavärdet.
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.
Iteration av utdata
I följande exempel skapas ett variabelt antal lagringskonton och en slutpunkt returneras för varje lagringskonto:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[parameters('storageCount')]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', copyIndex(), variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
}
Föregående mall returnerar en matris med följande värden:
[
"https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]
I nästa exempel returneras tre egenskaper från de nya lagringskontona.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[length(range(0, parameters('storageCount')))]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', range(0, parameters('storageCount'))[copyIndex()], variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageInfo": {
"type": "array",
"copy": {
"count": "[length(range(0, parameters('storageCount')))]",
"input": {
"id": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', copyIndex(), variables('baseName')))]",
"blobEndpoint": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]",
"status": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).statusOfPrimary]"
}
}
}
}
}
Föregående exempel returnerar en matris med följande värden:
[
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/0storagecfrbqnnmpeudi",
"blobEndpoint": "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
},
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/1storagecfrbqnnmpeudi",
"blobEndpoint": "https://1storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
}
]
Nästa steg
- Om du vill gå igenom en självstudie kan du läsa Självstudie: Skapa flera resursinstanser med ARM-mallar.
- För andra användningar av kopieringsloopen, se:
- 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.