Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Prima di distribuire un modello di Azure Resource Manager (modello di Resource Manager), è possibile visualizzare in anteprima le modifiche che verranno apportate. Azure Resource Manager fornisce l'operazione di simulazione per consentire di vedere come cambieranno le risorse se si distribuisce il modello. L'operazione ipotetica non apporta alcuna modifica alle risorse esistenti. Prevede invece le modifiche che verranno applicate se il modello specificato viene distribuito.
È possibile usare l'operazione di simulazione con Azure PowerShell, l'interfaccia della riga di comando di Azure o le operazioni API REST. La simulazione è supportata per le distribuzioni a livello di gruppo di risorse, sottoscrizione, gruppo di gestione e tenant.
Risorse di formazione
Per altre informazioni sulle simulazioni e per indicazioni pratiche, vedere Visualizzare in anteprima le modifiche alla distribuzione di Azure usando le simulazioni.
Autorizzazioni necessarie
Per distribuire un file Bicep o un modello di ARM, è necessario l'accesso in scrittura alle risorse distribuite e l'accesso per tutte le operazioni sul tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie le autorizzazioni Microsoft.Compute/virtualMachines/write
e Microsoft.Resources/deployments/*
. L'operazione di simulazione ha gli stessi requisiti di autorizzazione.
Per un elenco dei ruoli e delle autorizzazioni, vedere Ruoli predefiniti di Azure.
Limiti della simulazione
La simulazione espande i modelli annidati fino a raggiungere questi limiti:
- 500 modelli annidati.
- 800 gruppi di risorse in una distribuzione trasversale tra gruppi di risorse.
- 5 minuti impiegati per espandere i modelli annidati.
Quando viene raggiunto uno dei limiti, il tipo di modifica delle risorse rimanenti viene impostato su Ignora.
Installare un modulo Azure PowerShell
Per usare le simulazioni in PowerShell, devi avere la versione 4.2 o successiva del modulo Az.
Per installare il modulo, usa:
Install-Module -Name Az -Force
Per ulteriori informazioni sull'installazione dei moduli, vedi Installare Azure PowerShell.
Installare il modulo dell'interfaccia della riga di comando di Azure
Per usare la simulazione nell'interfaccia della riga di comando di Azure, devi avere l'interfaccia della riga di comando di Azure 2.14.0 o versione successiva. Se necessario, installare la versione più recente dell'interfaccia della riga di comando di Azure.
See results (Visualizza risultati)
Quando usi la simulazione in PowerShell o nell'interfaccia della riga di comando di Azure, l'output include risultati codificati a colori che ti permettono di visualizzare i diversi tipi di modifiche.
L'output di testo è:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Annotazioni
L'operazione di simulazione non è in grado di risolvere la funzione riferimento. Ogni volta che imposti una proprietà su un'espressione modello che include la funzione di riferimento, la simulazione segnala che la proprietà verrà modificata. Questo comportamento si verifica perché la simulazione confronta il valore corrente della proprietà (ad esempio true
o false
per un valore booleano) con l'espressione modello non risolta. Ovviamente, questi valori non corrispondono. Quando si distribuisce il modello, la proprietà cambierà solo quando l'espressione del modello viene risolta in un valore diverso.
Comandi di simulazione
Azure PowerShell
Per visualizzare in anteprima le modifiche prima di distribuire un modello, usare New-AzResourceGroupDeployment o New-AzSubscriptionDeployment. Aggiungere il parametro switch -Whatif
al comando di distribuzione.
New-AzResourceGroupDeployment -Whatif
per le distribuzioni del gruppo di risorseNew-AzSubscriptionDeployment -Whatif
eNew-AzDeployment -Whatif
per le distribuzioni a livello di sottoscrizione
Puoi usare il parametro switch -Confirm
per visualizzare in anteprima le modifiche e richiedere di continuare con la distribuzione.
-
New-AzResourceGroupDeployment -Confirm
per le distribuzioni del gruppo di risorse -
New-AzSubscriptionDeployment -Confirm
eNew-AzDeployment -Confirm
per le distribuzioni a livello di sottoscrizione
I comandi precedenti restituiscono un riepilogo di testo che è possibile esaminare manualmente. Per ottenere un oggetto che puoi esaminare a livello di codice per le modifiche, usa Get-AzResourceGroupDeploymentWhatIfResult o Get-AzSubscriptionDeploymentWhatIfResult.
-
$results = Get-AzResourceGroupDeploymentWhatIfResult
per le distribuzioni del gruppo di risorse -
$results = Get-AzSubscriptionDeploymentWhatIfResult
o$results = Get-AzDeploymentWhatIfResult
per le distribuzioni a livello di sottoscrizione
Interfaccia CLI di Azure
Per visualizzare in anteprima le modifiche prima di distribuire un modello, utilizzare:
- az deployment group what-if per le distribuzioni di gruppi di risorse
- az deployment sub what-if per le distribuzioni a livello di sottoscrizione
- az deployment mg what-if per le distribuzioni del gruppo di gestione
- az deployment tenant what-if per le distribuzioni tenant
Puoi utilizzare l’opzione --confirm-with-what-if
(o la sua forma abbreviata -c
) per visualizzare l’anteprima delle modifiche e ricevere la richiesta di continuare con la distribuzione. Aggiungere questa opzione a:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Ad esempio, usa az deployment group create --confirm-with-what-if
o -c
per le distribuzioni di gruppi di risorse.
I comandi precedenti restituiscono un riepilogo di testo che è possibile esaminare manualmente. Per ottenere un oggetto JSON che puoi controllare a livello di codice per verificare la presenza di modifiche, usa l'opzione --no-pretty-print
. Ad esempio, usa az deployment group what-if --no-pretty-print
per le distribuzioni di gruppi di risorse.
Per restituire i risultati senza colori, apri il file di configurazione interfaccia della riga di comando di Azure. Imposta no_color su Sì.
API REST di Azure
Per l'API REST, usa:
- Distribuzioni - what If per le distribuzioni di gruppi di risorse
- Distribuzioni: what if nell’ambito della sottoscrizione per le distribuzioni di sottoscrizioni
- Distribuzioni: what if nell’ambito del gruppo di gestione per le distribuzioni di gruppi di gestione
- Distribuzioni: what if nell’ambito tenant per le distribuzioni tenant.
Cambia tipi
L'operazione di simulazione elenca sette tipi diversi di modifiche:
- Crea: 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. Con la modalità completa, la risorsa verrà eliminata. In questo tipo di modifica sono incluse solo le risorse che supportano l'eliminazione in modalità completa.
- Ignora: la risorsa esiste, ma non è definita nel modello. La risorsa non verrà distribuita o modificata. Quando si raggiungono i limiti per l'espansione dei modelli nidificati, si verificherà questo tipo di modifica. Vedere Limiti di simulazione.
-
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 ResultFormat è impostato su
FullResourcePayloads
, ovvero il valore predefinito. -
NoEffect: la proprietà è di sola lettura e verrà ignorata dal servizio. Ad esempio, la proprietà
sku.tier
è sempre impostata in modo che corrisponda asku.name
nello spazio dei nomiMicrosoft.ServiceBus
. -
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 ResultFormat è impostato su
FullResourcePayloads
, ovvero il valore predefinito. -
Distribuisci: 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 ResultFormat è impostato su
ResourceIdOnly
.
Formato dei risultati
Puoi controllare il livello di dettaglio restituito sulle modifiche stimate. È possibile procedere in due modi:
- FullResourcePayloads - restituisce un elenco di risorse si modificheranno e dettagli sulle proprietà che si modificheranno
- ResourceIdOnly - restituisce un elenco di risorse che si modificheranno
Il valore predefinito è FullResourcePayloads.
Per i comandi di distribuzione di PowerShell, usa il parametro -WhatIfResultFormat
. Nei comandi dell'oggetto programmatico usa il parametro ResultFormat
.
Per l'interfaccia della riga di comando di Azure, usare il parametro --result-format
.
I risultati seguenti mostrano i due diversi formati di output:
Payload completi delle risorse
Resource and property changes are indicated with these symbols: - Delete + Create ~ Modify The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01] - tags.Owner: "Team A" ~ properties.addressSpace.addressPrefixes: [ - 0: "10.0.0.0/16" + 0: "10.0.0.0/15" ] ~ properties.subnets: [ - 0: name: "subnet001" properties.addressPrefix: "10.0.0.0/24" ] Resource changes: 1 to modify.
Solo ID risorsa
Resource and property changes are indicated with this symbol: ! Deploy The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ! Microsoft.Network/virtualNetworks/vnet-001 Resource changes: 1 to deploy.
Eseguire l'operazione di simulazione
Set up environment (Configurare l'ambiente)
Per informazioni sul funzionamento di simulazione, verranno eseguiti alcuni test. Prima di tutto, distribuire un modello che crea una rete virtuale. Questa rete virtuale verrà usata per testare il modo in cui le modifiche vengono segnalate da simulazione.
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
Testare la modifica
Al termine della distribuzione, è possibile testare l'operazione di simulazione. Questa volta si distribuisce un modello che modifica la rete virtuale. Manca uno dei tag originali, una subnet è stata rimossa e il prefisso dell'indirizzo è stato modificato.
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
L'output della simulazione è simile a:
L'output di testo è:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Nota che, nella parte superiore dell'output, i colori sono definiti per indicare il tipo di modifiche.
Nella parte inferiore dell'output viene visualizzato che il tag Proprietario è stato eliminato. Il prefisso dell'indirizzo è stato modificato da 10.0.0.0/16 a 10.0.0.0/15. La subnet denominata subnet001 è stata eliminata. Tenere presente che queste modifiche non sono state distribuite. Viene visualizzata un'anteprima delle modifiche che si verificheranno se si distribuisce il modello.
Alcune delle proprietà elencate come eliminate non cambieranno effettivamente. Le proprietà possono essere erroneamente segnalate come eliminate quando non sono presenti nel modello, ma vengono impostate automaticamente durante la distribuzione come valori predefiniti. Questo risultato è considerato "rumore" nella risposta di simulazione. La risorsa distribuita finale avrà i valori impostati per le proprietà. Con la maturità dell'operazione di simulazione, queste proprietà verranno filtrate in base al risultato.
Valutare a livello di codice i risultati di simulazione
A questo punto, valutiamo a livello di codice i risultati di simulazione impostando il comando su una variabile.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
Puoi visualizzare un riepilogo di ogni modifica.
foreach ($change in $results.Changes)
{
$change.Delta
}
Conferma eliminazione
L'operazione di simulazione supporta l'utilizzo della modalità di distribuzione. Quando è impostata la modalità di completamento, le risorse non presenti nel modello vengono eliminate. Nell'esempio seguente viene distribuito un modello per il quale non sono state definite risorse in modalità completa.
Per visualizzare in anteprima le modifiche prima di distribuire un modello, utilizzare il parametro confirm switch con il comando deployment. Se le modifiche sono come previsto, rispondere che si vuole completare la distribuzione.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Mode Complete `
-Confirm `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"
Poiché nel modello non sono definite risorse e la modalità di distribuzione è impostata su Completa, la rete virtuale verrà eliminata.
L'output di testo è:
Resource and property changes are indicated with this symbol:
- Delete
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
- Microsoft.Network/virtualNetworks/vnet-001
id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
location: "centralus"
name: "vnet-001"
tags.CostCenter: "12345"
tags.Owner: "Team A"
type: "Microsoft.Network/virtualNetworks"
Resource changes: 1 to delete.
Are you sure you want to execute the deployment?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Vengono visualizzate le modifiche previste e si può confermare l'esecuzione della distribuzione.
SDK
Puoi usare l'operazione di simulazione tramite gli SDK di Azure.
Per Python, usa simulazione.
Per Java, usa classe DeploymentWhatIf.
Per .NET usa classe DeploymentWhatIf.
Passaggi successivi
- L'estensione ARM Deployment Insights offre un modo semplice per integrare l'operazione di simulazione nella pipeline di Azure DevOps.
- Per utilizzare l'operazione "what-if" in una pipeline, vedere Test i modelli ARM con What-If in una pipeline.
- Se si notano risultati errati dall'operazione di simulazione, segnalare i problemi all'indirizzo https://aka.ms/whatifissues.
- Per un modulo Learn che illustra l'uso di what-if, vedere Visualizzare in anteprima le modifiche e convalidare le risorse di Azure usando what-if e il toolkit di test del modello di Resource Manager.