Compartilhar via


Implantação condicional em modelos do ARM

Às vezes, você precisa implantar opcionalmente um recurso em um modelo do ARM (Azure Resource Manager). Use o condition elemento para especificar se o recurso é implantado. O valor da condição é resolvido como verdadeiro ou falso. Quando o valor for verdadeiro, o recurso é criado. Quando o valor for false, o recurso não será criado. O valor só pode ser aplicado a todo o recurso.

Observação

A implantação condicional não é propagada para os recursos filhos. Para implantar condicionalmente um recurso e seus recursos filhos, aplique a mesma condição a cada tipo de recurso.

Dica

Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira as implantações condicionais.

Condição de implantação

Você pode passar um valor de parâmetro que indica se um recurso é implantado. O exemplo a seguir implanta condicionalmente uma zona 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"
      }
    }
  ]
}

Para obter um exemplo mais complexo, consulte o servidor lógico do SQL do Azure.

Recurso novo ou existente

Você pode usar a implantação condicional para criar um recurso novo ou usar um existente. O exemplo a seguir mostra como implantar uma nova conta de armazenamento ou usar uma conta de armazenamento existente.

{
  "$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')))]"
    }
  }
}

Quando o parâmetro newOrExisting é definido como novo, a condição é avaliada como true. A conta de armazenamento é implantada. Caso contrário, a conta de armazenamento existente será usada.

Para obter um modelo de exemplo completo que usa o condition elemento, consulte a VM com uma rede virtual, armazenamento e IP público novos ou existentes.

Funções de runtime

Se você usar uma função de referência ou lista com um recurso implantado condicionalmente, a função será avaliada mesmo se o recurso não for implantado. Você receberá um erro se a função se referir a um recurso que não existe.

Use a função if para garantir que a função seja avaliada apenas para condições quando o recurso for implantado. Consulte a função if para um modelo de exemplo que usa if e reference com um recurso implantado condicionalmente.

Você define um recurso como dependente de um recurso condicional exatamente como faria com qualquer outro recurso. Quando um recurso condicional não é implantado, o Azure Resource Manager o remove automaticamente das dependências necessárias.

Modo completo

Se você implantar um modelo com modo completo e um recurso não for implantado porque for avaliado como condition false, o resultado dependerá de qual versão da API REST você usará para implantar o modelo. Se você usar uma versão anterior a 2019-05-10, o recurso não será excluído. A partir de 2019-05-10, o recurso é excluído. As versões mais recentes do Azure PowerShell e da CLI do Azure excluem o recurso quando a condição for falsa.

Próximas etapas