Condividi tramite


Modalità di distribuzione di 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.

Importante

Usare gli stack di distribuzione per eseguire eliminazioni di risorse quando si usano modelli arm o file Bicep, perché la modalità completa verrà gradualmente deprecata.

Per 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 invariate, non viene eseguita alcuna operazione per tale risorsa. Se si modificano i valori delle proprietà per una risorsa, la risorsa viene aggiornata con i nuovi valori. Se si tenta di aggiornare il percorso o il tipo di una risorsa esistente, la distribuzione fallisce con un errore. Implementare invece una nuova risorsa nella posizione o del tipo di cui hai bisogno.

La modalità predefinita è incrementale.

Modalità incrementale

In modalità incrementale Resource Manager lascia invariate le risorse esistenti nel gruppo di risorse, ma non specificate nel modello. Le risorse nel modello vengono aggiunte al gruppo di risorse.

Importante

La modalità incrementale è la modalità di distribuzione consigliata. Se è necessario eliminare le risorse come parte di un file Bicep o di un modello JSON ARM, usare gli stack di distribuzione.

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 vengano lasciate invariate. Se non si specificano determinate proprietà, Resource Manager interpreta la distribuzione come sovrascrivendo tali valori. Le proprietà non incluse nel modello vengono reimpostate sui valori predefiniti. Specificare tutti i valori non predefiniti per la risorsa, non solo quelli che si sta aggiornando. La definizione di risorsa nel modello contiene sempre lo stato finale della risorsa. Non può rappresentare un aggiornamento parziale di una risorsa esistente.

Avvertimento

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

Per le subnet, specificare i valori tramite la proprietà subnets sulla risorsa Microsoft.Network/virtualNetworks. Non definire i valori attraverso la risorsa figlia Microsoft.Network/virtualNetworks/subnets. Finché le subnet sono definite nella rete virtuale, è possibile 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 si ridistribuisce l'app Web e si specifica 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.

Modalità completa

Avvertimento

La modalità completa non è consigliata. Se vuoi eseguire eliminazioni con distribuzioni di modelli Bicep o ARM, usa stack di distribuzione.

In modalità completa Resource Manager elimina le risorse esistenti nel gruppo di risorse, ma non specificate nel modello.

Annotazioni

Usa sempre l'operazione di simulazione prima di distribuire un modello in modalità completa. L'analisi 'What-if' mostra quali risorse verranno create, eliminate o modificate. Usa lo strumento "what-if" per evitare di eliminare involontariamente le risorse.

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

Prestare attenzione nell’usare 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 risorse 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 gruppo di risorse contiene una zona DNS (Microsoft.Network/dnsZones tipo di risorsa) e un record CNAME (Microsoft.Network/dnsZones/CNAME tipo di risorsa), la zona DNS è la risorsa padre per il record CNAME. Se si distribuisce con la modalità completa e non si include la zona DNS nel modello, la zona DNS e il record CNAME vengono entrambi eliminati. Se si include la zona DNS nel modello ma non si include il record CNAME, il CNAME non viene eliminato.

Per un elenco del modo in cui i tipi di risorse gestiscono l'eliminazione, vedere Eliminazione delle risorse di Azure per distribuzioni in modalità completa.

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

Annotazioni

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

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

Attualmente, il portale non supporta la modalità completa.

Risultato di esempio

Per illustrare la differenza tra le modalità incrementali e complete, considerare lo scenario seguente.

Il gruppo di risorse contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa C

Il modello contiene:

  • Risorsa A
  • Risorsa B
  • Risorsa D

Quando viene distribuito in modalità incrementale , il gruppo di risorse ha:

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

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

  • Risorsa A
  • Risorsa B
  • Risorsa D

Impostare la modalità di distribuzione

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

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

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

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

L'esempio seguente mostra 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