Prevedere il risultato di una distribuzione con l'operazione di simulazione

Completato

Chiunque distribuisca o modifichi risorse in un ambiente si pone domande come queste:

  • Si verificheranno interruzioni di servizi?
  • Si rischia di eliminare qualcosa?
  • In che modo questa distribuzione influirà sulle risorse esistenti?
  • È possibile verificare che ciò che si prevede sia effettivamente ciò che accadrà prima di selezionare il pulsante Distribuisci?

Procedere con la distribuzione sperando che vada tutto per il meglio non è un buon approccio. Un approccio migliore è l'uso dell'operazione di simulazione, Questa operazione consente di vedere in anticipo le conseguenze di una eventuale nuova distribuzione.

Azure Resource Manager offre l'operazione di simulazione per mettere in evidenza le modifiche risultanti dalla distribuzione di un modello. L'operazione di simulazione non modifica in alcun modo le risorse esistenti. Prevede piuttosto le modifiche che verrebbero applicate se il modello specificato venisse distribuito a livello di un gruppo di risorse e di una sottoscrizione.

Nota

L'operazione di simulazione a volte mostra che una risorsa cambierà quando in realtà non verrà apportata alcuna modifica. Il team Microsoft è impegnato a limitare questi problemi, ma a questo scopo ha bisogno dell'aiuto degli utenti, che sono invitati a segnalare i problemi riscontrati.

L'uso dell'operazione di simulazione consente di mettere a confronto il modello di stato corrente con quello desiderato. L'operazione di simulazione verifica se le modifiche apportate dal modello corrispondono alle aspettative senza applicare tali modifiche alle risorse reali o allo stato di tali risorse.

Controllare il formato dei risultati della simulazione

Il cmdlet New-AzResourceGroupDeployment di Azure PowerShell crea una nuova distribuzione in un gruppo di risorse. Quando si aggiunge il parametro -Whatif a questo comando, il comando passa dall'esecuzione della distribuzione alla semplice segnalazione di un'anteprima di ciò che accadrà se si esegue effettivamente la distribuzione.

Il comando az deployment group what-if offre un'anteprima di ciò che accadrà se si eseguirà una distribuzione.

È possibile controllare la quantità di output di testo dell'operazione di simulazione usando uno di questi formati di risultati:

  • FullResourcePayloads. Includendo questo parametro, si ottiene un output dettagliato costituito da un elenco delle risorse che verranno modificate. L'output mostra anche i dettagli di tutte le proprietà che cambieranno in base al modello.
  • ResourceIdOnly. Questa modalità restituisce un elenco delle risorse che verranno modificate, ma non tutti i dettagli.

Ad esempio, si supponga di modificare il tipo di archiviazione in un modello che distribuisce un singolo account di archiviazione in un ambiente esistente.

È possibile eseguire il codice di PowerShell seguente e richiedere a Resource Manager di fornire i payload completi delle risorse:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

Il comando precedente produce i risultati seguenti:

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

È quindi possibile eseguire nuovamente il comando, ma è sufficiente richiedere gli ID risorsa:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

Il comando precedente produce i risultati seguenti:

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Tipi di modifiche rilevate dalla simulazione

Quando si usa l'operazione di simulazione, vengono elencati sei tipi di modifiche:

Type Spiegazione Effetto
Creazione La risorsa non esiste attualmente ma è definita nel modello. La risorsa verrà creata.
Elimina Questo tipo di modifica si applica solo quando si usa la modalità completa per la distribuzione. La risorsa esiste, ma non è definita nel modello. Se si esegue la distribuzione usando la modalità incrementale, la risorsa non viene eliminata. Se si esegue la distribuzione usando la modalità incrementale, la risorsa non viene eliminata. Questo tipo di modifica viene restituito solo per le risorse che supportano l'eliminazione in modalità completa.
Ignora La risorsa esiste, ma non è definita nel modello. Quando si usa la modalità incrementale, ovvero la modalità di distribuzione predefinita, la risorsa non viene distribuita né modificata. Se si esegue la distribuzione usando la modalità completa, la risorsa verrà eliminata.
NoChange La risorsa esiste ed è definita nel modello. La risorsa verrà ridistribuita, ma le sue proprietà non verranno modificate. Questo tipo di modifica viene restituito quando il formato dei risultati è impostato su FullResourcePayloads, ovvero il formato predefinito.
Modifica La risorsa esiste ed è definita nel modello. La risorsa verrà ridistribuita e le sue proprietà verranno modificate. Questo tipo di modifica viene restituito quando il formato dei risultati è impostato su FullResourcePayloads, ovvero il formato predefinito.
Distribuzione La risorsa esiste ed è definita nel modello. La risorsa verrà ridistribuita. Le proprietà della risorsa possono essere modificate o meno. L'operazione restituisce questo tipo di modifica quando non ha informazioni sufficienti per determinare se una o più proprietà verranno modificate. Questa condizione viene visualizzata solo quando il formato dei risultati è impostato su ResourceIdOnly.

Se non è necessario conoscere tutti i tipi di modifica, è possibile usare l'argomento -WhatIfExcludeChangeType per omettere i tipi a cui non si è interessati.

Se non è necessario conoscere tutti i tipi di modifica, è possibile usare l'argomento --what-if-exclude-change-types per omettere i tipi a cui non si è interessati.

Usare risultati della simulazione in uno script

Può essere opportuno usare l'output dell'operazione di simulazione all'interno di uno script o come parte di un processo di distribuzione automatizzato.

È possibile ottenere i risultati usando il cmdlet Get-AzResourceGroupDeploymentWhatIfResult. Lo script può quindi analizzare i risultati ed eseguire la logica personalizzata necessaria.

È possibile ottenere i risultati JSON non elaborati aggiungendo l'argomento --no-pretty-print al comando dell'interfaccia della riga di comando. Lo script può quindi analizzare i risultati ed eseguire la logica personalizzata necessaria.

Modalità di distribuzione ed eliminazione delle risorse

A volte si può avere l'esigenza di verificare l'eliminazione di risorse durante la distribuzione del modello. A tale scopo, l'operazione di simulazione tiene conto della modalità di distribuzione in uso. Se si usa la modalità di distribuzione completa, Resource Manager segnala le risorse che verranno eliminate perché non definite nella distribuzione.

Verrà ora illustrato un esempio di modello che aggiorna una risorsa esistente e viene distribuito in modalità completa:

Diagram showing change types for three resources, some of which already exist.

Ecco una spiegazione di ciò che accade in questo esempio:

  • Il modello aggiorna un account di archiviazione denominato storage-1, che è già stato distribuito. Lo SKU passa da archiviazione con ridondanza locale ad archiviazione con ridondanza geograficae il valore del tag owner cambia in Team A. L'output della simulazione mostra un tipo di modifica Modifica per questa risorsa.
  • Il modello crea un nuovo account Azure Cosmos DB denominato cosmos-db-1, che non esiste ancora nel gruppo di risorse. L'output della simulazione mostra un tipo di modifica Crea per questa risorsa.
  • Il modello non include il server logico Azure SQL che esiste già nel gruppo di risorse. Poiché la distribuzione usa la modalità completa, l'output della simulazione mostra un tipo di modifica Elimina per questa risorsa. Se per la distribuzione viene usata la modalità incrementale anziché la modalità completa, il tipo di modifica sarà Ignora.

Confermare le distribuzioni

Per visualizzare in anteprima le modifiche prima di distribuire un modello, usare il parametro -Confirm con il comando di distribuzione. Se le modifiche corrispondono alle aspettative, confermare che si vuole completare la distribuzione.

Suggerimento

È consigliabile eseguire i comandi di distribuzione con l'opzione -Confirm, soprattutto se si esegue la distribuzione in modalità completa. L'opzione -Confirm offre infatti la possibilità di arrestare l'operazione se le modifiche proposte non corrispondono alle aspettative.

Per visualizzare in anteprima le modifiche prima di distribuire un modello, usare l'argomento --confirm-with-what-if con il comando di distribuzione. Se le modifiche corrispondono alle aspettative, confermare che si vuole completare la distribuzione.

Suggerimento

È consigliabile eseguire i comandi di distribuzione con l'argomento --confirm-with-what-if, soprattutto se si esegue la distribuzione in modalità completa. L'opzione --confirm-with-what-if offre infatti la possibilità di arrestare l'operazione se le modifiche proposte non corrispondono alle aspettative.