Stack di distribuzione (anteprima)

Uno stack di distribuzione di Azure è un tipo di risorsa di Azure che consente la gestione di un gruppo di risorse di Azure come unità atomica. Quando un file Bicep o un modello JSON arm viene inviato a uno stack di distribuzione, definisce le risorse gestite dallo stack. Se una risorsa precedentemente inclusa nel modello viene rimossa, verrà scollegata o eliminata in base al comportamento actionOnUnmanage specificato dello stack di distribuzione. Analogamente ad altre risorse di Azure, l'accesso allo stack di distribuzione può essere limitato usando il controllo degli accessi in base al ruolo di Azure (RBAC).

Per creare e aggiornare uno stack di distribuzione, puoi usare l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure insieme ai file Bicep. Questi file Bicep vengono transpilati in modelli JSON ARM, che vengono quindi distribuiti come oggetto di distribuzione dallo stack. Lo stack di distribuzione offre funzionalità aggiuntive oltre alle risorse di distribuzione conosciute, che fungono da superset di tali funzionalità.

Microsoft.Resources/deploymentStacks è il tipo di risorsa per gli stack di distribuzione. È costituito da un modello principale che può eseguire aggiornamenti da 1 a molti tra gli ambiti delle risorse descritte e bloccare eventuali modifiche indesiderate a tali risorse.

Quando pianifichi la tua distribuzione e determini quali gruppi di risorse devono far parte dello stesso stack, è importante considerare il ciclo di vita della gestione di tali risorse, che include la creazione, l'aggiornamento e l'eliminazione. Per esempio, supponiamo che tu debba effettuare il provisioning di alcune macchine virtuali di test per vari team di applicazioni in ambiti di gruppi di risorse diversi. In questo caso, puoi usare uno stack di distribuzione per creare questi ambienti di test e aggiornare le configurazioni delle macchine virtuali di test tramite gli aggiornamenti successivi allo stack di distribuzione. Dopo aver completato il progetto, potrebbe essere necessario rimuovere o eliminare tutte le risorse create, ad esempio le macchine virtuali di test. Usando uno stack di distribuzione, le risorse gestite possono essere facilmente rimosse specificando il flag di eliminazione appropriato. Questo approccio semplificato consente di risparmiare tempo durante la pulizia dell'ambiente, perché implica un singolo aggiornamento alla risorsa stack anziché una modifica o rimozione individuale di ogni macchina virtuale di test in vari ambiti del gruppo di risorse.

Gli stack di distribuzione richiedono Azure PowerShell versione 10.1.0 o successiva o l'interfaccia della riga di comando di Azure versione 2.50.0 o successiva.

Per creare il tuo primo stack di distribuzione, usa Avvio rapido: Creare lo stack di distribuzione.

Perché usare gli stack di distribuzione?

I processi di distribuzione offrono i vantaggi seguenti:

  • Provisioning semplificato e gestione delle risorse in ambiti diversi come entità coesa.
  • Prevenzione delle modifiche indesiderate alle risorse gestite tramite nega impostazioni.
  • Pulizia efficiente dell'ambiente usando flag di eliminazione durante gli aggiornamenti dello stack di distribuzione.
  • Uso di modelli standard, ad esempio Bicep, modelli di ARM o specifiche di modello per gli stack di distribuzione.

Limitazioni note

  • Le risorse create in modo implicito non vengono gestite dallo stack. Pertanto, non è possibile eseguire assegnazioni di negazione o pulizia.
  • Le assegnazioni di rifiuto non supportano i tag.
  • Le assegnazioni di rifiuto non sono supportate nell'ambito del gruppo di gestione.
  • Gli stack di distribuzione non possono eliminare i segreti dell'insieme di credenziali delle chiavi. Se si rimuovono i segreti dell'insieme di credenziali delle chiavi da un modello, assicurarsi di eseguire anche il comando di aggiornamento/eliminazione dello stack di distribuzione con la modalità scollegamento.

Problemi noti

  • L’eliminazione di gruppi di risorse attualmente evita le assegnazioni di negazione. Quando si crea uno stack di distribuzione nell'ambito del gruppo di risorse, il file Bicep non contiene la definizione per il gruppo di risorse. Nonostante l'impostazione di assegnazione di negazione, è possibile eliminare il gruppo di risorse e lo stack in esso contenuto. Tuttavia, se un blocco è attivo in qualsiasi risorsa all'interno del gruppo, l'operazione di eliminazione avrà esito negativo.
  • Simulazione non disponibile nell'anteprima.
  • Uno stack con ambito gruppo di gestione è limitato dalla distribuzione in un altro gruppo di gestione. Può essere distribuito solo nel gruppo di gestione dello stack stesso o in una sottoscrizione figlio.

Creare stack di distribuzione

È possibile creare una risorsa dello stack di distribuzione nell'ambito del gruppo di risorse, della sottoscrizione o del gruppo di gestione. Il modello passato in uno stack di distribuzione definisce le risorse da creare o aggiornare nell'ambito di destinazione specificato per la distribuzione del modello.

  • Uno stack nell'ambito del gruppo di risorse può distribuire il modello passato allo stesso ambito del gruppo di risorse in cui è presente lo stack di distribuzione.
  • Uno stack nell'ambito della sottoscrizione può distribuire il modello passato a un ambito del gruppo di risorse (se specificato) o allo stesso ambito della sottoscrizione in cui è presente lo stack di distribuzione.
  • Uno stack nell'ambito del gruppo di gestione può distribuire il modello passato all'ambito della sottoscrizione specificato.

È importante notare che, se esiste uno stack di distribuzione, esiste anche l'assegnazione di negazione creata con la funzionalità nega impostazioni. Ad esempio, creando uno stack di distribuzione nell'ambito della sottoscrizione che distribuisce il modello nell'ambito del gruppo di risorse e con la modalità nega impostazioni DenyDelete, puoi effettuare facilmente il provisioning delle risorse gestite al gruppo di risorse specificato e bloccare i tentativi di eliminazione a tali risorse. Usando questo approccio, migliori anche la sicurezza dello stack di distribuzione separandola a livello di sottoscrizione, anziché a livello di gruppo di risorse. Questa separazione garantisce che i team di sviluppo che lavorano con le risorse sottoposte a provisioning abbiano visibilità e accesso in scrittura solo ai gruppi di risorse, mentre lo stack di distribuzione rimane isolato a un livello superiore. Ciò riduce al minimo il numero di utenti che possono modificare uno stack di distribuzione e apportare modifiche all'assegnazione di negazione. Per altre informazioni, vedi Proteggere la risorsa gestita dall'eliminazione.

I comandi create-stack possono essere usati anche per aggiornare gli stack di distribuzione.

Per creare uno stack di distribuzione nell'ambito del gruppo di risorse:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Per creare uno stack di distribuzione nell'ambito della sottoscrizione:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Il parametro DeploymentResourceGroupName specifica il gruppo di risorse usato per archiviare le risorse gestite. Se il parametro non viene specificato, le risorse gestite vengono archiviate nell'ambito della sottoscrizione.

Per creare uno stack di distribuzione nell'ambito del gruppo di gestione:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Il parametro deploymentSubscriptionId specifica la sottoscrizione usata per archiviare le risorse gestite. Se il parametro non viene specificato, le risorse gestite vengono archiviate nell'ambito del gruppo di gestione.

Elenca stack di distribuzione

Per elencare le risorse dello stack di distribuzione nell'ambito del gruppo di risorse:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Per elencare le risorse dello stack di distribuzione nell'ambito della sottoscrizione:

Get-AzSubscriptionDeploymentStack

Per elencare le risorse dello stack di distribuzione nell'ambito del gruppo di gestione:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Aggiornare gli stack di distribuzione

Per aggiornare uno stack di distribuzione, che può comportare l'aggiunta o l'eliminazione di una risorsa gestita, devi apportare modifiche ai file Bicep sottostanti. Dopo aver apportato le modifiche, hai due opzioni per aggiornare lo stack di distribuzione: eseguire il comando update o rieseguire il comando create.

L'elenco delle risorse gestite può essere controllato completamente tramite lo schema progettuale IaC (Infrastruttura come codice).

Usare il comando Imposta

Per aggiornare uno stack di distribuzione nell'ambito del gruppo di risorse:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Per aggiornare uno stack di distribuzione nell'ambito della sottoscrizione:

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Il parametro DeploymentResourceGroupName specifica il gruppo di risorse usato per archiviare le risorse dello stack di distribuzione. Se non specifichi un nome di gruppo di risorse, il servizio stack di distribuzione creerà automaticamente un nuovo gruppo di risorse.

Per aggiornare uno stack di distribuzione nell'ambito del gruppo di gestione:

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Usa il comando Nuovo

Visualizzerai un avviso simile al seguente:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Per ulteriori informazioni, vedi Creare stack di distribuzione.

Controllare lo scollegamento e l'eliminazione

Come risorsa scollegata (o risorsa non gestita) si intende una risorsa non rilevata o gestita dallo stack di distribuzione, ma che esiste ancora in Azure.

Per indicare ad Azure di eliminare le risorse non gestite, aggiorna lo stack con il comando create stack con uno dei flag di eliminazione seguenti. Per ulteriori informazioni, vedi Creare stack di distribuzione.

  • DeleteAll: usa delete (elimina) anziché detach (scollega) per le risorse gestite e i gruppi di risorse.
  • DeleteResources: usa delete (elimina) anziché detach (scollega) per le sole risorse gestite.
  • DeleteResourceGroups: usa delete (elimina) anziché detach (scollega) per i soli gruppi di risorse gestite. Non è valido usare DeleteResourceGroups da solo. DeleteResourceGroups deve essere usato insieme a DeleteResources.

Ad esempio:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

Avviso

Quando si eliminano gruppi di risorse con le proprietà DeleteAll o DeleteResourceGroups, verranno eliminati anche i gruppi di risorse gestite e tutte le risorse contenute in tali gruppi.

Eliminare gli stack di distribuzione

Se esegui comandi di eliminazione senza i flag di eliminazione, le risorse non gestite verranno scollegate ma non eliminate. Per eliminare le risorse non gestite, usare le opzioni seguenti:

  • DeleteAll: elimina sia le risorse che i gruppi di risorse.
  • DeleteResources: Elimina le sole risorse.
  • DeleteResourceGroups: elimina i soli gruppi di risorse.

Anche se specifichi l'opzione elimina tutto, se sono presenti risorse non gestite all'interno del gruppo di risorse in cui si trova lo stack di distribuzione, sia la risorsa non gestita che il gruppo di risorse stesso non verranno eliminati.

Per eliminare le risorse dello stack di distribuzione nell'ambito del gruppo di risorse:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Per eliminare le risorse dello stack di distribuzione nell'ambito della sottoscrizione:

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Per eliminare le risorse dello stack di distribuzione nell'ambito del gruppo di gestione:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Visualizza le risorse gestite nello stack di distribuzione

Durante l'anteprima pubblica, il servizio stack di distribuzione non ha ancora un'interfaccia utente grafica (GUI) del portale di Azure. Per visualizzare le risorse gestite all'interno di uno stack di distribuzione, usa i seguenti comandi di Azure PowerShell/interfaccia della riga di comando di Azure:

Per visualizzare le risorse gestite nell'ambito del gruppo di risorse:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Per visualizzare le risorse gestite nell'ambito della sottoscrizione:

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Per visualizzare le risorse gestite nell'ambito del gruppo di gestione:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Aggiungi risorse allo stack di distribuzione

Per aggiungere una risorsa gestita, aggiungi la definizione di risorsa ai file Bicep sottostanti e quindi esegui di nuovo il comando update o riesegui il comando create. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.

Eliminare le risorse gestite dallo stack di distribuzione

Per eliminare una risorsa gestita, rimuovi la definizione della risorsa dai file Bicep sottostanti e quindi riesegui il comando di aggiornamento o riesegui il comando create. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.

Proteggere le risorse gestite dall'eliminazione

Quando si crea uno stack di distribuzione, è possibile assegnare un tipo specifico di autorizzazioni alle risorse gestite, impedendone l'eliminazione da parte di entità di sicurezza non autorizzate. Queste impostazioni vengono definite impostazioni di negazione. Vuoi archiviare lo stack in un ambito padre.

Azure PowerShell include questi parametri per personalizzare l'assegnazione di negazione:

  • DenySettingsMode: definisce le operazioni non consentite nelle risorse gestite per proteggersi da entità di sicurezza non autorizzate che tentano di eliminarle o aggiornarle. Questa restrizione si applica a tutti, a meno che non venga concesso l’accesso esplicitamente. I valori includono: None, DenyDeletee DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: le impostazioni di negazione vengono applicate alle risorse annidate nelle risorse gestite.
  • DenySettingsExcludedAction: elenco di operazioni di gestione basate sui ruoli escluse dalle impostazioni di negazione. Sono consentite fino a 200 azioni.
  • DenySettingsExcludedPrincipal: elenco degli IDs Microsoft Entra esclusi dal blocco. Sono consentite fino a cinque entità di sicurezza.

Per applicare le impostazioni di negazione nell'ambito del gruppo di risorse:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Per applicare le impostazioni di negazione nell'ambito della sottoscrizione:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Usa il parametro DeploymentResourceGroupName per specificare il nome del gruppo di risorse in cui viene creato lo stack di distribuzione. Se non viene specificato un ambito, usa l'ambito dello stack di distribuzione.

Per applicare le impostazioni di negazione nell'ambito del gruppo di gestione:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Usa il parametro DeploymentSubscriptionId per specificare l'ID sottoscrizione in cui viene creato lo stack di distribuzione. Se non viene specificato un ambito, usa l'ambito dello stack di distribuzione.

Scollegare le risorse gestite dallo stack di distribuzione

Per impostazione predefinita, gli stack di distribuzione si scollegano e non eliminano le risorse non gestite quando non sono più contenuti nell'ambito di gestione dello stack. Per ulteriori informazioni, vedi Aggiornare stack di distribuzione.

Esportare modelli da stack di distribuzione

Puoi esportare le risorse da uno stack di distribuzione in un output JSON. Puoi reindirizzare l'output a un file.

Per esportare uno stack di distribuzione nell'ambito del gruppo di risorse:

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

Per esportare uno stack di distribuzione nell'ambito della sottoscrizione:

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

Per esportare uno stack di distribuzione nell'ambito del gruppo di gestione:

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Passaggi successivi

Per una guida introduttiva, vedi Avvio rapido: Creare uno stack di distribuzione.