Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous montre comment créer plusieurs instances d’une propriété dans votre modèle Azure Resource Manager (modèle ARM). En ajoutant une boucle de copie à la section propriétés d’une ressource dans votre modèle, vous pouvez définir dynamiquement le nombre d’éléments d’une propriété pendant le déploiement. Vous évitez également d’avoir à répéter la syntaxe du modèle.
Vous ne pouvez utiliser la boucle de copie qu’avec des ressources de niveau supérieur, même lors de l’application d’une boucle de copie à une propriété. Pour en savoir plus sur la modification d’une ressource enfant en ressource de niveau supérieur, consultez Itération pour une ressource enfant.
Vous pouvez également utiliser la boucle de copie avec des ressources, des variables et des sorties.
Conseil / Astuce
Nous recommandons Bicep, parce qu’il offre les mêmes fonctionnalités que les modèles ARM et que la syntaxe est plus facile d’utilisation. Pour en savoir plus, consultez les boucles.
Syntaxe
Ajoutez l’élément copy
à la section ressources de votre modèle pour définir le nombre d’éléments d’une propriété. L’élément copy a le format général suivant :
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
Pour name
, indiquez le nom de la propriété de ressource que vous souhaitez créer.
La count
propriété spécifie le nombre d’itérations souhaitées pour la propriété.
La input
propriété spécifie les propriétés que vous souhaitez répéter. Vous créez un tableau d’éléments construits à partir de la valeur dans la input
propriété.
Limites de copie
Le nombre ne peut pas dépasser 800.
Le nombre ne peut pas être un nombre négatif. Il peut être égal à zéro si vous déployez le modèle avec une version récente d’Azure CLI, PowerShell ou l’API REST. Plus précisément, vous devez utiliser :
- Azure PowerShell 2.6 ou version ultérieure
- Azure CLI 2.0.74 ou version ultérieure
- API REST version 2019-05-10 ou ultérieure
- Les déploiements liés doivent utiliser l’API version 2019-05-10 ou ultérieure pour le type de ressource de déploiement
Les versions antérieures de PowerShell, de l’interface CLI et de l’API REST ne prennent pas en charge le nombre zéro.
Itération de propriété
L’exemple suivant montre comment appliquer une boucle de copie à la dataDisks
propriété sur une machine virtuelle :
{
"$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
}
}
]
}
...
}
}
]
}
Notez que lorsque vous utilisez copyIndex à l’intérieur d’une itération de propriété, vous devez fournir le nom de l’itération. L’itération de propriété prend également en charge un argument de contrepartie. L’argument offset doit venir après le nom de l’itération, par exemple copyIndex('dataDisks', 1)
.
Le modèle déployé devient :
{
"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’opération de copie est utile lors de l’utilisation de tableaux, car vous pouvez effectuer une itération dans chaque élément du tableau. Utilisez la fonction de longueur sur le tableau pour spécifier le nombre d’itérations et copyIndex
récupérer l’index actuel dans le tableau.
L’exemple de modèle suivant crée un groupe de basculement pour les bases de données passées en tant que tableau.
{
"$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’élément copy
est un tableau qui vous permet de spécifier plusieurs propriétés pour la ressource.
{
"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": {
...
}
}
]
}
}
Vous pouvez utiliser des itérations de ressources et de propriétés ensemble. Référencez l’itération de propriété par son nom.
{
"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')]]"
}
}
}
]
}
}
Exemples de modèles
L’exemple suivant montre un scénario courant pour créer plusieurs valeurs pour une propriété.
Modèle | Descriptif |
---|---|
Déploiement de machines virtuelles avec un nombre variable de disques de données | Déploie plusieurs disques de données avec une machine virtuelle. |
Étapes suivantes
- Pour suivre un didacticiel, consultez Tutoriel : Créer plusieurs instances de ressources avec des modèles ARM.
- Pour d'autres utilisations de la boucle de copie, consultez :
- Si vous souhaitez en savoir plus sur les sections d’un modèle, consultez Comprendre la structure et la syntaxe des modèles ARM.
- Pour savoir comment déployer votre modèle, consultez Déployer des ressources avec des modèles ARM et Azure PowerShell.