Compartir a través de


Implementación condicional en plantillas de ARM

A veces, tiene que implementar opcionalmente un recurso en una plantilla de Azure Resource Manager (plantilla de ARM). Use el condition elemento para especificar si se implementa el recurso. El valor de la condición se evalúa como verdadero o falso. Cuando el valor es verdadero, se crea el recurso. Cuando el valor es false, el recurso no se crea. El valor solo se puede aplicar a todo el recurso.

Nota:

La implementación condicional no se aplica en cascada a los recursos secundarios. Si desea implementar condicionalmente un recurso y sus recursos secundarios, debe aplicar la misma condición a cada tipo de recurso.

Sugerencia

Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para más información, consulte Implementaciones condicionales.

Condición de implementación

Puede pasar un valor de parámetro que indique si se implementa un recurso. En el ejemplo siguiente se implementa condicionalmente una 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 obtener un ejemplo más complejo, consulte Servidor lógico de Azure SQL.

Recurso nuevo o existente

Puede usar la implementación condicional para crear un recurso nuevo o usar uno existente. En el ejemplo siguiente se muestra cómo implementar una nueva cuenta de almacenamiento o usar una cuenta de almacenamiento 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')))]"
    }
  }
}

Cuando el parámetro newOrExisting está establecido en new, la condición se evalúa como true. Se implementa la cuenta de almacenamiento. De lo contrario, se usa la cuenta de almacenamiento existente.

Para obtener una plantilla de ejemplo completa que use el condition elemento, consulte VM con una red virtual, un almacenamiento y una dirección IP pública nuevos o existentes.

Funciones en tiempo de ejecución

Si usa una función de referencia o lista con un recurso implementado condicionalmente, la función se evalúa incluso si el recurso no está implementado. Se produce un error si la función hace referencia a un recurso que no existe.

Use la función if para asegurarse de que la función solo se evalúa para las condiciones cuando se implementa el recurso. Consulte la función if de una plantilla de ejemplo que usa if y reference con un recurso implementado condicionalmente.

Se establece un recurso como dependiente de un recurso condicional exactamente como lo haría con cualquier otro recurso. Cuando no se implementa un recurso condicional, Azure Resource Manager lo quita automáticamente de las dependencias necesarias.

Modo completo

Si implementa una plantilla con el modo completo y no se implementa un recurso porque condition se evalúa como falso, el resultado depende de la versión de la API REST que use para implementar la plantilla. Si usa una versión anterior a 2019-05-10, el recurso no se elimina. A partir del 2019-05-10, se elimina el recurso. Las versiones más recientes de Azure PowerShell y la CLI de Azure eliminan el recurso cuando la condición es false.

Pasos siguientes