Modelli di distribuzione Azure Resource Manager

Quando si distribuiscono le risorse, specificare se la distribuzione è un aggiornamento incrementale o completo. Queste due modalità differiscono nel modo in cui Resource Manager gestisce le risorse che sono presenti nel gruppo di risorse ma non nel modello.

In entrambe le modalità Resource Manager tenta di creare tutte le risorse specificate nel modello. Se la risorsa esiste già nel gruppo di risorse e le relative impostazioni sono identiche, non viene eseguita alcuna operazione per tale risorsa. Se si modificano i valori della proprietà per una risorsa, questa viene aggiornata con i nuovi valori. Se si prova ad aggiornare il percorso o il tipo di una risorsa esistente, la distribuzione ha esito negativo e restituisce un errore. È invece necessario distribuire una nuova risorsa con il percorso o il tipo necessari.

La modalità predefinita è incrementale.

Modalità completa

Nella modalità di completamento, Resource Manager elimina le risorse esistenti nel gruppo di risorse che non sono specificate nel modello.

Nota

Usa sempre l'operazione di simulazione prima di distribuire un modello in modalità completa. La simulazione mostra quali risorse verranno create, eliminate o modificate. Usa le operazioni di simulazione per evitare di eliminare involontariamente le risorse.

Se il tuo modello include una risorsa non distribuita perché la condizione è valutata come falsa, il risultato dipende dalla versione dell'API REST usata per distribuire il modello. Se si usa una versione precedente alla versione 2019-05-10, la risorsa non viene eliminata. Con la versione 2019-05-10 o successive la risorsa viene eliminata. Le versioni più recenti di Azure PowerShell e dell'interfaccia della riga di comando di Azure eliminano la risorsa.

Presta attenzione quando usi la modalità completa con i cicli di copia. Tutte le risorse non specificate nel modello dopo la risoluzione del ciclo di copia vengono eliminate.

Se esegui la distribuzione in più di un gruppo di risorse in un modello, le risorse nel gruppo di risorse specificato nell'operazione di distribuzione sono idonee per l'eliminazione. Le risorse nei gruppi di risorse secondarie non vengono eliminate.

Esistono alcune differenze nel modo in cui i tipi di risorsa gestiscono le eliminazioni in modalità completa. Le risorse padre vengono eliminate automaticamente quando non sono specificate in un modello distribuito in modalità completa. Alcune risorse figlio non vengono eliminate automaticamente quando non sono specificate nel modello. Tuttavia, queste risorse figlio vengono eliminate se viene eliminata la risorsa padre.

Ad esempio, se il tuo gruppo di risorse contiene una zona DNS (tipo di risorsaMicrosoft.Network/dnsZones) e un record CNAME (tipo di risorsaMicrosoft.Network/dnsZones/CNAME), la zona DNS è la risorsa padre per il record CNAME. Se si distribuisce in la modalità completa e non si include la zona DNS nel modello, la zona DNS e il record CNAME vengono entrambi eliminati. Se includi la zona DNS nel modello, ma non includi il record CNAME, il CNAME non viene eliminato.

Per informazioni dettagliate sul modo in cui i tipi di risorsa gestiscono l'eliminazione, vedere Eliminazione delle risorse di Azure per le distribuzioni in modalità completa.

Se il gruppo di risorse è bloccato, la modalità completa non elimina le risorse.

Nota

Solo i modelli a livello di radice supportano la modalità di distribuzione completa. Per modelli collegati o annidati, è necessario usare la modalità di distribuzione incrementale.

Le distribuzioni a livello di sottoscrizione non supportano la modalità completa.

Attualmente, il portale non supporta la modalità completa.

Modalità incrementale

Nella modalità incrementale, Resource Manager lascia invariate le risorse esistenti nel gruppo di risorse che non sono specificate nel modello. Le risorse presenti nel modello vengono aggiunte al gruppo di risorse.

Importante

Quando si ridistribuisce una risorsa esistente in modalità incrementale, tutte le proprietà vengono riapplicate. Le proprietà non vengono aggiunte in modo incrementale. Un malinteso comune consiste nel pensare che le proprietà non specificate nel modello siano lasciate invariate. Se non specifichi determinate proprietà, Resource Manager interpreta la distribuzione come sovrascrittura di questi valori. Le proprietà non incluse nel modello vengono reimpostate sui valori predefiniti. Specifica tutti i valori non predefiniti per la risorsa, non solo quelli che stai aggiornando. La definizione di risorsa nel modello contiene sempre lo stato finale della risorsa. Non può rappresentare un aggiornamento parziale di una risorsa esistente.

Avviso

In rari casi, puoi specificare proprietà in una risorsa o in una delle sue risorse figlio. Due esempi comuni sono le subnet nelle reti virtuali e i valori di configurazione del sito per le app Web. In questi casi, devi gestire con attenzione gli aggiornamenti incrementali.

Per le subnet, specifica i valori tramite la subnetsproprietà nella risorsa Microsoft.Network/virtualNetworks. Non definire i valori tramite la risorsa figlio Microsoft.Network/virtualNetworks/subnets. Finché le subnet sono definite nella rete virtuale, puoi ridistribuire la rete virtuale e non perdere le subnet.

Per i valori di configurazione del sito, i valori vengono implementati nel tipo di risorsa figlio Microsoft.Web/sites/config. Se ridistribuisci l'app Web e specifichi un oggetto vuoto per i valori di configurazione del sito, la risorsa figlio non viene aggiornata. Tuttavia, se specifichi nuovi valori di configurazione del sito, il tipo di risorsa figlio viene aggiornato.

Risultato di esempio

Per illustrare la differenza tra le modalità incrementale e completa, si consideri lo scenario seguente.

Il gruppo di risorse contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa C

Modello contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa D

Quando viene implementato in modalità incrementale, il gruppo di risorse contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa C
  • Risorsa D

Quando viene implementato in modalità completa, la risorsa C viene eliminata. Il gruppo di risorse contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa D

Impostare la modalità di distribuzione

Per impostare la modalità di distribuzione durante la distribuzione con PowerShell, usare il parametro Mode.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Per impostare la modalità di distribuzione durante la distribuzione con interfaccia della riga di comando di Azure, usare il parametro mode.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

L'esempio seguente illustra un modello collegato impostato sulla modalità di distribuzione incrementale:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Passaggi successivi