Déploiement conditionnel dans des modèles ARM
Parfois, vous devez déployer une ressource de manière conditionnelle dans un modèle Azure Resource Manager (modèle ARM). Pour spécifier si la ressource est déployée, utilisez l’élément condition
. La valeur de la condition est résolue en true ou false. Lorsque la valeur est true, la ressource est créée. Lorsque la valeur est false, la ressource n’est pas créée. La valeur ne peut être appliquée qu’à l’ensemble de la ressource.
Notes
L’exécution du déploiement conditionnel n’inclut pas les ressources enfants. Si vous souhaitez déployer une ressource et ses ressources enfants de manière conditionnelle, vous devez appliquer la même condition à chaque type de ressource.
Conseil
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 plus d’informations, consultez les déploiements conditionnels.
Condition de déploiement
Vous pouvez transmettre dans un paramètre une valeur indiquant si une ressource est déployée. L’exemple suivant opère un déploiement de manière conditionnelle dans une zone DNS.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deployZone": {
"type": "bool"
}
},
"functions": [],
"resources": [
{
"condition": "[parameters('deployZone')]",
"type": "Microsoft.Network/dnsZones",
"apiVersion": "2018-05-01",
"name": "myZone",
"location": "global"
}
]
}
Pour un exemple plus complexe, consultez Serveur logique SQL Azure.
Ressource nouvelle ou existante
Vous pouvez utiliser un déploiement conditionnel pour créer une ressource ou en utiliser une existante. L’exemple suivant montre comment déployer un nouveau compte de stockage ou utiliser un compte de stockage existant.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"newOrExisting": {
"type": "string",
"defaultValue": "new",
"allowedValues": [
"new",
"existing"
]
}
},
"resources": [
{
"condition": "[equals(parameters('newOrExisting'), 'new')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
{
"condition": "[equals(parameters('newOrExisting'), 'existing')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]"
}
],
"outputs": {
"storageAccountId": {
"type": "string",
"value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
}
}
}
Lorsque le paramètre newOrExisting
a la valeur new, la condition donne le résultat true. Le compte de stockage est déployé. Sinon, le compte de stockage existant est utilisé.
Pour un exemple de modèle complet qui utilise l’élément condition
, consultez VM with a new or existing Virtual Network, Storage, and Public IP (Machine virtuelle avec un réseau virtuel, un stockage et une adresse IP publique nouveaux ou existants).
Fonctions de runtime
Si vous utilisez une fonction de référence ou de liste avec une ressource qui est déployée conditionnellement, la fonction est évaluée même si la ressource n’est pas déployée. Vous obtenez une erreur si la fonction fait référence à une ressource qui n’existe pas.
Utilisez la fonction if pour vous assurer que la fonction est évaluée uniquement pour les conditions lorsque la ressource est déployée. Consultez la fonction if pour obtenir un exemple de modèle qui utilise if
et reference
avec une ressource déployée de manière conditionnelle.
Vous définissez une ressource comme étant dépendante d’une ressource conditionnelle exactement comme vous le feriez pour une autre ressource. Quand une ressource conditionnelle n’est pas déployée, Azure Resource Manager la supprime automatiquement des dépendances nécessaires.
Mode Complet
Si vous déployez un modèle en mode complet et qu’une ressource n’est pas déployée parce que condition
prend la valeur false, le résultat dépend de la version de l’API REST utilisée pour déployer le modèle. Si vous utilisez une version antérieure à 2019-05-10, la ressource n’est pas supprimée. Avec 2019-05-10 ou ultérieur, elle est supprimée. Les dernières versions d’Azure PowerShell et d’Azure CLI suppriment la ressource lorsque la condition a la valeur false.
Étapes suivantes
- Pour suivre un module Learn qui traite du déploiement conditionnel, consultez Gérer des déploiements cloud complexes à l’aide des fonctionnalités avancées de modèle ARM.
- Pour obtenir des recommandations sur la création de modèles, consultez Bonnes pratiques relatives aux modèles ARM.
- Pour créer plusieurs instances d’une ressource, consultez Itération de ressources dans des modèles ARM.