Remarque
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 valeurs pour une variable dans votre modèle Azure Resource Manager (modèle ARM). En ajoutant l’élément copy à la section variables de votre modèle, vous pouvez définir dynamiquement le nombre d’éléments d’une variable pendant le déploiement. Vous évitez également d’avoir à répéter la syntaxe du modèle.
Vous pouvez également utiliser la copie avec ressources, propriétés dans une ressource et 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
L’élément copy a le format général suivant :
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
La name propriété est n’importe quelle valeur qui identifie la boucle. La count propriété spécifie le nombre d’itérations souhaitées pour la variable.
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é. Il peut s’agir d’une propriété unique (comme une chaîne) ou d’un objet avec plusieurs propriétés.
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 CLI et de l'API REST ne prennent pas en charge zéro pour le nombre.
Itération de variable
L’exemple suivant montre comment créer un tableau de valeurs de chaîne :
{
"$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')]"
}
}
}
Le modèle précédent retourne un tableau avec les valeurs suivantes :
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
L’exemple suivant montre comment créer un tableau d’objets avec trois propriétés : name, diskSizeGBet 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')]"
}
}
}
L’exemple précédent retourne un tableau avec les valeurs suivantes :
[
{
"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
}
]
Remarque
L’itération de variable prend en charge un argument de contrepartie. L’argument offset doit venir après le nom de l’itération, par exemple copyIndex('diskNames', 1). Si vous ne fournissez pas de valeur de décalage, la valeur par défaut est 0 pour la première instance.
Vous pouvez également utiliser l’élément copy dans une variable. L’exemple suivant crée un objet dont le tableau est l’une de ses valeurs.
{
"$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')]"
}
}
}
L’exemple précédent retourne un objet avec les valeurs suivantes :
{
"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
}
]
}
L’exemple suivant montre les différentes façons d’utiliser copy des variables.
{
"$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"
}
}
}
Exemples de modèles
Les exemples suivants montrent des scénarios courants pour créer plusieurs valeurs pour une variable.
| Modèle | Descriptif |
|---|---|
| Copier des variables | Illustre les différentes façons d’itérer sur les variables. |
| Plusieurs règles de sécurité | Déploie plusieurs règles de sécurité sur un groupe de sécurité réseau. Il construit les règles de sécurité à partir d’un paramètre. Pour le paramètre, consultez plusieurs fichiers de paramètres NSG. |
| Copier le stockage avec des variables | Exemple d’itération d’une variable et de création de plusieurs comptes de stockage. |
Étapes suivantes
- Pour suivre un didacticiel, consultez Tutoriel : Créer plusieurs instances de ressources avec des modèles ARM.
- Pour d'autres utilisations de l'élément 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.