Distribuzione condizionale nei modelli ARMConditional deployment in ARM templates

In alcuni casi è necessario distribuire facoltativamente una risorsa in un modello di Azure Resource Manager (ARM).Sometimes you need to optionally deploy a resource in an Azure Resource Manager (ARM) template. Usare l' condition elemento per specificare se la risorsa viene distribuita.Use the condition element to specify whether the resource is deployed. Il valore di questo elemento restituisce true o false.The value for this element resolves to true or false. Quando il valore è true, la risorsa viene creata.When the value is true, the resource is created. Quando il valore è false, la risorsa non viene creata.When the value is false, the resource isn't created. Il valore può essere applicato solo all'intera risorsa.The value can only be applied to the whole resource.

Nota

La distribuzione condizionale non si sovrappone alle risorse figlio.Conditional deployment doesn't cascade to child resources. Se si desidera distribuire una risorsa e le relative risorse figlio in modo condizionale, è necessario applicare la stessa condizione a ogni tipo di risorsa.If you want to conditionally deploy a resource and its child resources, you must apply the same condition to each resource type.

Risorsa nuova o esistenteNew or existing resource

È possibile usare la distribuzione condizionale per creare una nuova risorsa o utilizzarne una esistente.You can use conditional deployment to create a new resource or use an existing one. L'esempio seguente illustra come usare la condizione per distribuire un nuovo account di archiviazione o usare un account di archiviazione esistente.The following example shows how to use condition to deploy a new storage account or use an existing storage account.

{
  "condition": "[equals(parameters('newOrExisting'),'new')]",
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2017-06-01",
  "name": "[variables('storageAccountName')]",
  "location": "[parameters('location')]",
  "sku": {
    "name": "[variables('storageAccountType')]"
  },
  "kind": "Storage",
  "properties": {}
}

Quando il parametro newOrExisting è impostato su New, la condizione restituisce true.When the parameter newOrExisting is set to new, the condition evaluates to true. L'account di archiviazione viene distribuito.The storage account is deployed. Tuttavia, quando newOrExisting è impostato su existing, la condizione restituisce false e l'account di archiviazione non viene distribuito.However, when newOrExisting is set to existing, the condition evaluates to false and the storage account isn't deployed.

Per un modello di esempio completo che usa l'elemento condition, vedere Macchina virtuale con una Rete virtuale nuova o esistente, archiviazione e indirizzo IP pubblico.For a complete example template that uses the condition element, see VM with a new or existing Virtual Network, Storage, and Public IP.

Consenti condizioneAllow condition

È possibile passare un valore di parametro che indica se è consentita una condizione.You can pass in a parameter value that indicates whether a condition is allowed. Nell'esempio seguente viene distribuita un'installazione di SQL Server e, facoltativamente, gli indirizzi IP di Azure.The following example deploys a SQL server and optionally allows Azure IPs.

{
  "type": "Microsoft.Sql/servers",
  "apiVersion": "2015-05-01-preview",
  "name": "[parameters('serverName')]",
  "location": "[parameters('location')]",
  "properties": {
    "administratorLogin": "[parameters('administratorLogin')]",
    "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
    "version": "12.0"
  },
  "resources": [
    {
      "condition": "[parameters('allowAzureIPs')]",
      "type": "firewallRules",
      "apiVersion": "2015-05-01-preview",
      "name": "AllowAllWindowsAzureIps",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers/', parameters('serverName'))]"
      ],
      "properties": {
        "endIpAddress": "0.0.0.0",
        "startIpAddress": "0.0.0.0"
      }
    }
  ]
}

Per il modello completo, vedere server logico SQL di Azure.For the complete template, see Azure SQL logical server.

Funzioni di runtimeRuntime functions

Se si usa una funzione di riferimento o elenco con una risorsa distribuita in modo condizionale, la funzione viene valutata anche se la risorsa non viene distribuita.If you use a reference or list function with a resource that is conditionally deployed, the function is evaluated even if the resource isn't deployed. Viene ricevuto un errore se la funzione fa riferimento a una risorsa che non esiste.You get an error if the function refers to a resource that doesn't exist.

Usare la funzione if per assicurarsi che la funzione venga valutata solo per le condizioni quando la risorsa viene distribuita.Use the if function to make sure the function is only evaluated for conditions when the resource is deployed. Vedere la funzione if per un modello di esempio che usa if e reference con una risorsa distribuita in modo condizionale.See the if function for a sample template that uses if and reference with a conditionally deployed resource.

Si imposta una risorsa come dipendente da una risorsa condizionale esattamente come per qualsiasi altra risorsa.You set a resource as dependent on a conditional resource exactly as you would any other resource. Quando una risorsa condizionale non viene distribuita, Azure Resource Manager la rimuove automaticamente dalle dipendenze richieste.When a conditional resource isn't deployed, Azure Resource Manager automatically removes it from the required dependencies.

Modalità completaComplete mode

Se si distribuisce un modello con la modalità completa e una risorsa non viene distribuita perché la condizione restituisce false, il risultato dipende dalla versione dell'API REST usata per distribuire il modello.If you deploy a template with complete mode and a resource isn't deployed because condition evaluates to false, the result depends on which REST API version you use to deploy the template. Se si usa una versione precedente alla 2019-05-10, la risorsa non viene eliminata.If you use a version earlier than 2019-05-10, the resource isn't deleted. Con 2019-05-10 o versioni successive, la risorsa viene eliminata.With 2019-05-10 or later, the resource is deleted. Le versioni più recenti di Azure PowerShell e dell'interfaccia della riga di comando di Azure eliminano la risorsa quando condition è false.The latest versions of Azure PowerShell and Azure CLI delete the resource when condition is false.

Passaggi successiviNext steps