Partager via


Déploiement conditionnel dans les modèles ARM

Vous devez parfois déployer une ressource dans un modèle Azure Resource Manager (modèle ARM). Utilisez l’élément condition pour spécifier si la ressource est déployée. La valeur de la condition est définie sur true ou false. Lorsque la valeur est vraie, 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.

Note

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 / 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 déploiements conditionnels.

Condition de déploiement

Vous pouvez transmettre une valeur de paramètre qui indique si une ressource est déployée. L’exemple suivant déploie conditionnellement une zone DNS.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "deployZone": {
      "type": "bool",
      "defaultValue": true
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2023-07-01-preview",
      "name": "myZone",
      "location": "global",
      "properties": {
        "zoneType": "Public"
      }
    }
  ]
}

Pour obtenir un exemple plus complexe, consultez le serveur logique Azure SQL.

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": "2025-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-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 est défini sur new, la condition l’évalue comme true. Le compte de stockage est déployé. Sinon, le compte de stockage existant est utilisé.

Pour obtenir un exemple complet de modèle qui utilise l’élément condition , consultez la 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 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 un exemple de modèle qui utilise if et reference avec une ressource déployée conditionnellement.

Vous définissez une ressource comme dépendant d’une ressource conditionnelle exactement comme vous le feriez pour toute autre ressource. Lorsqu’une ressource conditionnelle n’est pas déployée, Azure Resource Manager le supprime automatiquement des dépendances requises.

Mode complet

Si vous déployez un modèle en mode complet et qu’une ressource n’est pas déployée, car condition elle est évaluée à false, le résultat dépend de la version de l’API REST que vous utilisez 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 version ultérieure, la ressource est supprimée. Les dernières versions d’Azure PowerShell et d’Azure CLI suppriment la ressource quand la condition est false.

Étapes suivantes