Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come creare più di un'istanza di una proprietà nel template del Gestore risorse di Azure (template ARM). Aggiungendo un ciclo di copia alla sezione delle proprietà di una risorsa nel modello, è possibile impostare dinamicamente il numero di elementi per una proprietà durante la distribuzione. Eviti anche di dover ripetere la sintassi del modello.
È possibile usare il ciclo di copia solo con risorse di primo livello, anche quando si applica un ciclo di copia a una proprietà. Per informazioni sulla modifica di una risorsa figlia in una risorsa di primo livello, vedere Iterazione per una risorsa figlia.
È anche possibile usare il ciclo di copia con risorse, variabili e output.
Suggerimento
È consigliabile usare Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più facile da usare. Per altre informazioni, vedere Cicli.
Sintassi
Aggiungere l'elemento copy
alla sezione resources del modello per impostare il numero di elementi per una proprietà. L'elemento copy ha il formato generale seguente:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
Per name
specificare il nome della proprietà della risorsa da creare.
La count
proprietà specifica il numero di iterazioni desiderate per la proprietà .
La input
proprietà specifica le proprietà che si desidera ripetere. Si crea una matrice di elementi costruiti dal valore nella input
proprietà .
Limiti di copia
Il conteggio non può superare 800.
Il conteggio non può essere un numero negativo. Può essere zero se si distribuisce il modello con una versione recente dell'interfaccia della riga di comando di Azure, di PowerShell o dell'API REST. In particolare, è necessario usare:
- Azure PowerShell 2.6 o versione successiva
- Azure CLI 2.0.74 o versioni successive
- API REST versione 2019-05-10 o successiva
- Le distribuzioni collegate devono usare la versione API 2019-05-10 o successiva per il tipo di risorsa di distribuzione
Le versioni precedenti di PowerShell, dell'interfaccia della riga di comando e dell'API REST non supportano zero per il conteggio.
Iterazione delle proprietà
L'esempio seguente illustra come applicare il ciclo di copia alla dataDisks
proprietà in una macchina virtuale:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"numberOfDataDisks": {
"type": "int",
"minValue": 0,
"maxValue": 16,
"defaultValue": 3,
"metadata": {
"description": "The number of dataDisks to create."
}
},
...
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
...
"properties": {
"storageProfile": {
...
"copy": [
{
"name": "dataDisks",
"count": "[parameters('numberOfDataDisks')]",
"input": {
"lun": "[copyIndex('dataDisks')]",
"createOption": "Empty",
"diskSizeGB": 1023
}
}
]
}
...
}
}
]
}
Si noti che quando si usa copyIndex all'interno di un'iterazione di proprietà, è necessario specificare il nome dell'iterazione. L'iterazione delle proprietà supporta anche un argomento offset. L'offset deve venire dopo il nome dell'iterazione, ad esempio copyIndex('dataDisks', 1)
.
Il modello distribuito diventa:
{
"name": "examplevm",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2020-06-01",
"properties": {
"storageProfile": {
"dataDisks": [
{
"lun": 0,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 1,
"createOption": "Empty",
"diskSizeGB": 1023
},
{
"lun": 2,
"createOption": "Empty",
"diskSizeGB": 1023
}
],
...
L'operazione di copia è utile quando si utilizzano matrici perché è possibile scorrere ogni elemento nella matrice. Usare la funzione length nella matrice per specificare il conteggio per le iterazioni e copyIndex
recuperare l'indice corrente nella matrice.
Il modello di esempio seguente crea un gruppo di failover per i database passati come matrice.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"primaryServerName": {
"type": "string"
},
"secondaryServerName": {
"type": "string"
},
"databaseNames": {
"type": "array",
"defaultValue": [
"mydb1",
"mydb2",
"mydb3"
]
}
},
"variables": {
"failoverName": "[format('{0}/{1}failovergroups', parameters('primaryServerName'), parameters('primaryServerName'))]"
},
"resources": [
{
"type": "Microsoft.Sql/servers/failoverGroups",
"apiVersion": "2015-05-01-preview",
"name": "[variables('failoverName')]",
"properties": {
"readWriteEndpoint": {
"failoverPolicy": "Automatic",
"failoverWithDataLossGracePeriodMinutes": 60
},
"readOnlyEndpoint": {
"failoverPolicy": "Disabled"
},
"partnerServers": [
{
"id": "[resourceId('Microsoft.Sql/servers', parameters('secondaryServerName'))]"
}
],
"copy": [
{
"name": "databases",
"count": "[length(parameters('databaseNames'))]",
"input": "[resourceId('Microsoft.Sql/servers/databases', parameters('primaryServerName'), parameters('databaseNames')[copyIndex('databases')])]"
}
]
}
}
],
"outputs": {
}
}
L'elemento copy
è una matrice in modo da poter specificare più proprietà per la risorsa.
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2017-10-01",
"name": "exampleLB",
"properties": {
"copy": [
{
"name": "loadBalancingRules",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
},
{
"name": "probes",
"count": "[length(parameters('loadBalancingRules'))]",
"input": {
...
}
}
]
}
}
È possibile usare insieme le iterazioni di risorse e proprietà. Fare riferimento all'iterazione della proprietà in base al nome.
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2018-04-01",
"name": "[format('{0}{1}', parameters('vnetname'), copyIndex())]",
"copy":{
"count": 2,
"name": "vnetloop"
},
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('addressPrefix')]"
]
},
"copy": [
{
"name": "subnets",
"count": 2,
"input": {
"name": "[format('subnet-{0}', copyIndex('subnets'))]",
"properties": {
"addressPrefix": "[variables('subnetAddressPrefix')[copyIndex('subnets')]]"
}
}
}
]
}
}
Modelli di esempio
L'esempio seguente illustra uno scenario comune per la creazione di più valori per una proprietà.
Modello | Descrizione |
---|---|
Distribuzione di macchine virtuali con un numero variabile di dischi dati | Distribuisce diversi dischi dati con una macchina virtuale. |
Passaggi successivi
- Per seguire un tutorial, vedere Tutorial: Creare istanze multiple di risorse usando modelli ARM.
- Per altri usi del ciclo di copia, vedere:
- Per informazioni sulle sezioni di un modello, vedere Comprendere la struttura e la sintassi dei modelli ARM.
- Per informazioni su come distribuire il modello, consultare Distribuire risorse con i modelli ARM e Azure PowerShell.