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 creare o aggiornare uno stack di deployment Azure, visualizza in anteprima le modifiche che lo stack apporta utilizzando l'operazione what-if. L'operazione ipotetica non apporta alcuna modifica alle risorse esistenti. Invece, prevede i cambiamenti che avvengono se applichi lo stack con il template e i parametri specificati. Poiché uno stack di distribuzione gestisce un insieme di risorse come un'unica unità, visualizzare in anteprima le modifiche usando what-if è particolarmente utile. Puoi confermare quali risorse sono state create, aggiornate o lasciate invariate. Puoi anche catturare le risorse che diventano non gestite (staccate o cancellate) prima di applicare la modifica.
Simulazione per distribuzioni Bicep
L'operazione what-if è una funzione dei template di Azure Resource Manager che anteprima le modifiche apportate da una distribuzione prima che tu le applichi. È disponibile per le distribuzioni standard di Bicep e per gli stack di distribuzione. Per una descrizione completa di come funziona l'operazione, dei tipi di modifiche che segnala e delle relative limitazioni, consulta Visualizzare in anteprima le modifiche di distribuzione di Bicep usando what-if. Il resto di questo articolo si concentra sull'uso di what-if con gli stack di distribuzione.
In che modo i risultati della simulazione dello stack differiscono dalla simulazione di distribuzione
Se si sta passando dalle distribuzioni agli stack di distribuzione, la differenza più importante riguarda la posizione in cui risiede il risultato.
Per una distribuzione standard, la simulazione è un'operazione. Lo esegui, Azure restituisce le modifiche previste e dopo non viene memorizzato nulla.
Per uno stack di distribuzione, la simulazione crea una risorsa di risultato simulazione. Il risultato è una risorsa Azure autonoma di tipo Microsoft.Resources/deploymentStacksWhatIfResults che nomini tu stesso, e che fa riferimento allo stack con cui è stata valutata invece di essere un'operazione su quello stack. Poiché il risultato è una risorsa a sé stante, puoi recuperarla, condividere il suo ID risorsa ed eliminarla in seguito.
| Caratteristica | Distribuzione simulazione | Simulazione dello stack di distribuzione |
|---|---|---|
| Form | Un'operazione che restituisce un risultato | Una risorsa che crei tu |
| Name | Non nominato | Fornisci un nome |
| Tipo di risorsa | Non applicabile | Microsoft.Resources/deploymentStacksWhatIfResults |
| Collegamento allo stack | Non applicabile |
properties.deploymentStackResourceId fa riferimento allo stack |
| Persistenza | Non memorizzato | Memorizzata per l'intervallo di ritenzione che hai impostato |
Un risultato ha un ID risorsa in questa forma:
/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Resources/deploymentStacksWhatIfResults/{what-if-result-name}
Lo stack che hai valutato non deve necessariamente esistere ancora. Se non lo fa, what-if riporta lo stack stesso come una nuova risorsa, il che ti permette di visualizzare in anteprima la prima esecuzione di uno stack prima di crearlo.
Limitations
La funzionalità what-if per gli stack di distribuzione condivide le limitazioni di base di what-if delle distribuzioni di modelli di Azure Resource Manager, incluse quelle relative all'accuratezza dei risultati per determinati tipi di risorse e proprietà. Rivedi sempre attentamente i cambiamenti previsti prima di applicare uno stack, soprattutto quando actionOnUnmanage è impostato su un'opzione di eliminazione.
- La riduzione del rumore non elimina tutte le differenze. Il "What if" filtra molte differenze comuni che non sono cambiamenti reali, ma non le filtra tutte. Per maggiori informazioni, vedi Riduzione del rumore.
- I risultati memorizzati persistono fino alla scadenza del loro intervallo di conservazione. Ogni risultato what-if è una risorsa nell'ambito in cui lo crei, e conta ai limiti di risorse di quell'ambito. Un risultato che utilizza un intervallo di ritenzione più lungo di
PT3Hquello non viene eliminato automaticamente, quindi elimina i risultati che non ti servono più. Per maggiori informazioni, consulta Recupera ed elimina i risultati memorizzati.
Come funziona il what-if con gli stack di distribuzione
Quando esegui what-if su uno stack di deployment, l'operazione valuta il template rispetto allo stato attuale delle risorse gestite dallo stack e segnala ogni risorsa come uno dei seguenti tipi di modifica:
| Tipo di modifica | Description |
|---|---|
| Creare | La risorsa non esiste e viene creata. |
| Modifica | La risorsa esiste e alcune proprietà cambiano. |
| NoChange | La risorsa esiste e non viene modificata. |
| Elimina | Si applica quando actionOnUnmanage è impostato su cancellazione. La risorsa viene rimossa dalla pila ed eliminata. |
| Scollega | Si applica quando actionOnUnmanage è impostato per disconnettersi. La risorsa viene rimossa dalla gestione dello stack ma non viene eliminata da Azure. |
| Unsupported | La risorsa non è compatibile con l'analisi what-if. |
Annotazioni
Quando il fornitore di risorse ignora una proprietà di sola lettura (ad esempio, sku.tier impostata per corrispondere sku.name a alcuni tipi di risorse), what-if riporta quella proprietà come NoEffect. Alcuni client visualizzano NoEffect come NoChange. Questa differenza riguarda solo il display e non influisce sulle modifiche applicate dallo stack.
What-if fa emergere anche risorse che sono staccate dallo stack (non più gestite) in base al comportamento actionOnUnmanage , così puoi confermare che nessuna risorsa gestita viene rimossa involontariamente.
Riduzione del rumore
What-if confronta il tuo template con lo stato attuale delle risorse gestite dallo stack. Non ogni differenza che trova è un cambiamento fatto tu. I provider di risorse aggiungono e normalizzano valori dopo che una risorsa è stata distribuita, quindi una proprietà può differire dal tuo template anche quando nulla di significativo è cambiato. Queste differenze sono rumori e rendono il risultato più difficile da leggere.
Gli stack di distribuzione filtrano questo rumore di fondo per te. Quando distribuisci o aggiorni uno stack, Azure valuta il what-if per lo stack in quel momento e mantiene il risultato come baseline. Quando in seguito si esegue una simulazione sullo stack, qualsiasi proprietà che risulti invariata tra tale linea di base e la valutazione corrente viene rimossa dal risultato in quanto considerata rumore. Ciò che rimane è più vicino al set di cambiamenti che il tuo modello introduce effettivamente.
Poiché il valore di riferimento viene registrato quando lo stack viene distribuito, la riduzione del rumore si applica agli stack creati o aggiornati dopo la disponibilità della funzionalità. Se uno stack non è stato distribuito o aggiornato da allora, i risultati del what-if includono comunque rumore. Distribuisci o aggiorna lo stack una volta per stabilire la baseline.
Annotazioni
La riduzione del rumore elimina molte differenze comuni, ma non le elimina tutte. Rivedere i cambiamenti segnalati invece di presumere che ogni differenza sia un cambiamento reale.
Esegui il what-if prima di creare o aggiornare uno stack
Esegui il comando what-if per anteprima i cambiamenti senza applicarli. Identifica lo stack di destinazione tramite il relativo ID risorsa: usa --stack-id in interfaccia della riga di comando di Azure o -StackResourceId in Azure PowerShell.
--name (interfaccia della riga di comando di Azure) o -Name (Azure PowerShell) è il valore che specifica il nome del risultato what-if archiviato e l'operazione conserva tale risultato per il periodo di conservazione specificato, in modo da poterlo recuperare in seguito.
L'intervallo di conservazione utilizza il formato di durata ISO 8601, ad esempio PT3H per tre ore o P7D sette giorni.
Suggerimento
Imposta l'intervallo di ritenzione su PT3H o meno. I risultati che richiedono un intervallo di conservazione più lungo non vengono cancellati automaticamente, quindi devi cancellarli tu stesso quando non ne hai più bisogno.
Per anteprima le modifiche di uno stack di gruppo risorse, usa il seguente comando:
az stack-whatif group create \
--name "<what-if-result-name>" \
--resource-group "<resource-group-name>" \
--stack-id "<deployment-stack-resource-id>" \
--template-file "<bicep-file-name>" \
--action-on-unmanage "detachAll" \
--deny-settings-mode "none" \
--retention-interval "PT3H"
Per visualizzare in anteprima le modifiche di uno stack in abbonamento, usa il seguente comando:
az stack-whatif sub create \
--name "<what-if-result-name>" \
--location "<location>" \
--stack-id "<deployment-stack-resource-id>" \
--template-file "<bicep-file-name>" \
--action-on-unmanage "detachAll" \
--deny-settings-mode "none" \
--retention-interval "PT3H"
Per anteprima le modifiche di uno stack di gruppo di gestione, usa il seguente comando:
az stack-whatif mg create \
--name "<what-if-result-name>" \
--management-group-id "<management-group-id>" \
--location "<location>" \
--stack-id "<deployment-stack-resource-id>" \
--template-file "<bicep-file-name>" \
--action-on-unmanage "detachAll" \
--deny-settings-mode "none" \
--retention-interval "PT3H"
Per anticipare l'effetto di un aggiornamento su uno stack esistente, esegui lo stesso comando what-if e passa l'ID risorsa di quello stack. In Azure PowerShell puoi anche usare i corrispondenti Set-Az*DeploymentStackWhatIfResult cmdlet.
Recupero ed elimina i risultati memorizzati
Poiché ogni risultato what-if è una risorsa a sé stante, puoi elencare, recuperare ed eliminare i risultati in qualsiasi ambito. Elimina i risultati che non ti servono più, specialmente quando imposti un intervallo di ritenzione più lungo di PT3H.
# List the what-if results in a resource group
az stack-whatif group list --resource-group "<resource-group-name>"
# Get a single result
az stack-whatif group show --name "<what-if-result-name>" --resource-group "<resource-group-name>"
# Get a single result by resource ID
az stack-whatif group show --id "<what-if-result-resource-id>"
# Delete a result
az stack-whatif group delete --name "<what-if-result-name>" --resource-group "<resource-group-name>" --yes
Utilizzo az stack-whatif sub e az stack-whatif mg per ambiti di abbonamento e gruppi di gestione.
Ottieni modifiche a livello di risorsa o proprietà
Un risultato what-if contiene cambiamenti a due livelli di dettaglio: quali risorse cambiano e quali proprietà individuali cambiano su quelle risorse.
Quando si crea una risultato della simulazione, l'output include le modifiche a livello di proprietà. Quando recuperi un risultato memorizzato, l'output include solo le modifiche a livello di risorsa. Per includere le modifiche a livello di proprietà quando recuperi un risultato, usa --with-property-changes interfaccia della riga di comando di Azure o -WithPropertyChanges Azure PowerShell.
az stack-whatif group show \
--name "<what-if-result-name>" \
--resource-group "<resource-group-name>" \
--with-property-changes true
Recuperare un risultato senza l'opzione riporta che la risorsa cambia, ma non cosa cambia su di essa:
Azure
~ /subscriptions/<subscription-id>/resourceGroups/demo-rg/providers/Microsoft.Storage/storageAccounts/examplestorage
~ Management Status: "notManaged" => "managed"
= Deny Status: "none"
Se si ottiene lo stesso risultato con l'opzione, vengono aggiunte le singole modifiche alle proprietà:
Azure
~ /subscriptions/<subscription-id>/resourceGroups/demo-rg/providers/Microsoft.Storage/storageAccounts/examplestorage [2023-01-01]
~ Management Status: "notManaged" => "managed"
= Deny Status: "none"
~ sku.name: "Standard_LRS" => "Standard_GRS"
- tags.myTag: "myValue"
+ tags.env: "demo"
L'opzione si applica quando recuperi un singolo risultato. L'elenco dei risultati non riporta le modifiche alle proprietà.
Conferma prima di fare domanda
Usa il 'what-if' come fase di conferma nelle sessioni interattive e nelle pipeline:
- In modo interattivo, esegui il comando what-if, rivedi i cambiamenti previsti e poi esegui il comando stack create per applicarli.
-
Nell'automazione, acquisisci il risultato dell'analisi what-if e subordina la fase di applicazione alla revisione o all'approvazione. Questo passaggio è prezioso per gli stack perché un aggiornamento può staccare o cancellare risorse a seconda dell'impostazione
actionOnUnmanage.