Uitvoeriteratie in ARM-sjablonen
In dit artikel leest u hoe u meer dan één waarde maakt voor een uitvoer in uw Azure Resource Manager-sjabloon (ARM-sjabloon). Door een kopieerlus toe te voegen aan de uitvoersectie van uw sjabloon, kunt u tijdens de implementatie dynamisch een aantal items retourneren.
U kunt ook een kopieerlus gebruiken met resources, eigenschappen in een resource en variabelen.
Tip
We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie lussen voor meer informatie.
Syntaxis
Voeg het copy
element toe aan de uitvoersectie van uw sjabloon om een aantal items te retourneren. Het kopieerelement heeft de volgende algemene indeling:
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-output>
}
De count
eigenschap geeft het aantal iteraties op dat u wilt gebruiken voor de uitvoerwaarde.
De input
eigenschap geeft de eigenschappen op die u wilt herhalen. U maakt een matrix met elementen die zijn samengesteld op basis van de waarde in de input
eigenschap. Het kan één eigenschap zijn (zoals een tekenreeks) of een object met verschillende eigenschappen.
Kopieerlimieten
Het aantal mag niet groter zijn dan 800.
Het aantal kan geen negatief getal zijn. Dit kan nul zijn als u de sjabloon implementeert met een recente versie van Azure CLI, PowerShell of REST API. U moet met name het volgende gebruiken:
- Azure PowerShell 2.6 of hoger
- Azure CLI 2.0.74 of hoger
- REST API-versie 2019-05-10 of hoger
- Gekoppelde implementaties moeten API-versie 2019-05-10 of hoger gebruiken voor het implementatieresourcetype
Eerdere versies van PowerShell, CLI en de REST API bieden geen ondersteuning voor nul voor het aantal.
Iteratie van uitvoer
In het volgende voorbeeld wordt een variabel aantal opslagaccounts gemaakt en wordt een eindpunt geretourneerd voor elk opslagaccount:
{
"$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]"
}
}
}
}
De voorgaande sjabloon retourneert een matrix met de volgende waarden:
[
"https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]
In het volgende voorbeeld worden drie eigenschappen van de nieuwe opslagaccounts geretourneerd.
{
"$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]"
}
}
}
}
}
In het voorgaande voorbeeld wordt een matrix geretourneerd met de volgende waarden:
[
{
"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"
}
]
Volgende stappen
- Zie Zelfstudie: Meerdere resource-exemplaren maken met ARM-sjablonen om een zelfstudie te doorlopen.
- Zie voor andere toepassingen van de kopieerlus:
- Zie De structuur en syntaxis van ARM-sjablonen begrijpen als u meer wilt weten over de secties van een sjabloon.
- Zie Resources implementeren met ARM-sjablonen en Azure PowerShell voor meer informatie over het implementeren van uw sjabloon.