Esercitazione: Creare un runbook del flusso di lavoro PowerShell in Automazione
Questa esercitazione illustra la creazione di un runbook del flusso di lavoro PowerShell in Automazione di Azure. I runbook del flusso di lavoro PowerShell sono runbook di testo basati sul flusso di lavoro Windows PowerShell. È possibile creare e modificare direttamente il codice del runbook usando l'editor di testo nel portale di Azure.
Nota
Questo articolo è applicabile solo per PowerShell 5.1. Le versioni di PowerShell 7+ non supportano i flussi di lavoro e non è possibile aggiornare i runbook obsoleti. È consigliabile usare runbook testuali di PowerShell 7.2 per funzionalità avanzate, ad esempio l'esecuzione parallela del processo. Altre informazioni sulle limitazioni dei runbook del flusso di lavoro PowerShell.
In questa esercitazione apprenderai a:
- Creare un runbook del flusso di lavoro PowerShell
- Testare e pubblicare il runbook
- Eseguire il processo del runbook e monitorarne lo stato
- Aggiungere l'autenticazione per gestire le risorse di Azure
- Aggiornare i parametri del runbook per avviare una macchina virtuale di Azure
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
- Un account Automazione di Azure con almeno un'identità gestita assegnata all'utente. Per altre informazioni, vedere Abilitare l'identità gestita.
- Moduli Az:
Az.Accounts
eAz.Compute
importati nell'account di Automazione. Per altre informazioni, vedere Importazione di moduli Az. - Due o più macchine virtuali di Azure. Poiché si arrestano e si avviano questi computer, non devono essere macchine virtuali di produzione.
- Il modulo Azure Az PowerShell installato nel computer. Installare o aggiornare, vedere Come installare il modulo Azure Az PowerShell.
Assegnare le autorizzazioni alle identità gestite
Assegnare le autorizzazioni all'identità gestita appropriata per consentire l'arresto di una macchina virtuale. Il runbook può usare l'identità gestita assegnata dal sistema dell'account di Automazione o un'identità gestita assegnata dall'utente. Vengono forniti passaggi per assegnare le autorizzazioni a ogni identità. Nella procedura seguente si usa il portale di Azure. Se si preferisce usare PowerShell, vedere Assegnare ruoli di Azure con Azure PowerShell.
Accedere al portale di Azure e passare all'account di Automazione.
In Impostazioni account selezionare Identità (anteprima).
Nella scheda Assegnato dal sistema, in Autorizzazioni selezionare Assegnazioni di ruolo di Azure per aprire la pagina Assegnazioni di ruolo di Azure.
Selezionare + Aggiungi assegnazione di ruolo (anteprima) per aprire la pagina Aggiungi assegnazione di ruolo (anteprima).
Selezionare i valori appropriati.
Proprietà Description Scope L'ambito è un set di risorse a cui si applica l'assegnazione di ruolo. Nell'elenco a discesa selezionare Gruppo di risorse. Subscription Questo campo deve essere popolato automaticamente con la sottoscrizione. Gruppo di risorse Nell'elenco a discesa selezionare il gruppo di risorse per concedere le autorizzazioni di identità. Ruolo Nell'elenco a discesa selezionare Utente di DevTest Labs. Selezionare Salva e quindi chiudere la pagina Assegnazioni di ruolo di Azure per tornare alla scheda Assegnato dal sistema.
Selezionare la scheda Assegnato dall'utente.
Selezionare l'identità gestita assegnata dall'utente dall'elenco per aprire la pagina Identità gestita.
Annotare l'ID client per gli usi successivi.
Nel menu a sinistra selezionare Assegnazioni di ruolo di Azure e quindi + Aggiungi assegnazione di ruolo (anteprima) per aprire la pagina Aggiungi assegnazione di ruolo (anteprima).
Selezionare i valori appropriati.
Proprietà Description Scope Nell'elenco a discesa selezionare Gruppo di risorse. Subscription Questo campo deve essere popolato automaticamente con la sottoscrizione. Gruppo di risorse Nell'elenco a discesa selezionare il gruppo di risorse per concedere le autorizzazioni di identità. Ruolo Nell'elenco a discesa selezionare Utente di DevTest Labs. Selezionare Salva e quindi chiudere la pagina Assegnazioni di ruolo di Azure per tornare alla scheda Assegnata dall'utente.
Creare un nuovo runbook
Per iniziare, creare un semplice runbook del flusso di lavoro PowerShell. Uno dei vantaggi offerti dai flussi di lavoro di Windows PowerShell consiste nella possibilità di eseguire un set di comandi in parallelo anziché in sequenza, come accade invece con uno script tipico.
Nota
Con la creazione del runbook di rilascio è disponibile una nuova esperienza nel portale di Azure. Quando si seleziona pannello Runbook >Crea un runbook, viene visualizzata una nuova pagina Crea un runbook con le opzioni applicabili.
Nella pagina apri account di Automazione, in Automazione processi, selezionare Runbook
Selezionare +Crea un runbook.
- Denominare il runbook. Ad esempio, testare.
- Dal menu a discesa tipo di runbook, selezionare flusso di lavoro PowerShell.
- Nell'elenco a discesa Versione di runtime, selezionare 5.1.
- Immettere Descrizione applicabile.
- Seleziona Crea.
Aggiungere un codice al runbook
È possibile digitare il codice direttamente nel runbook oppure è possibile selezionare i cmdlet, i runbook e le risorse dal controllo Libreria e aggiungerli al runbook con tutti i parametri correlati. Per questa esercitazione si digiterà il codice direttamente nel runbook.
Il runbook è attualmente vuoto e contiene solo la parola chiave workflow
obbligatoria, il nome del runbook e le parentesi graffe che racchiuderanno l'intero flusso di lavoro.
workflow MyFirstRunbook-Workflow
{
}
È possibile utilizzare la parola chiave
Parallel
per creare un blocco di script con comandi multipli eseguiti in contemporanea. Immettere il codice seguente tra parentesi graffe:parallel { Write-Output "Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date } Write-Output " `r`n" Write-Output "Non-Parallel" Get-Date Start-Sleep -Seconds 3 Get-Date
Salvare il runbook facendo clic su Salva.
Testare il runbook
Prima di pubblicare il runbook per renderlo disponibile nell'ambiente di produzione, occorre testarlo per verificare che funzioni correttamente. Quando si testa un runbook, è necessario eseguire la versione Bozza e visualizzarne l'output in modo interattivo.
Fare clic su Riquadro di test per aprire la pagina Test.
Selezionare Avvia per avviare il test. Viene creato un processo del runbook e il relativo stato viene visualizzato nel riquadro.
Lo stato iniziale del processo è In coda, per indicare che è in attesa della disponibilità di un ruolo di lavoro per runbook nel cloud. Lo stato passa ad Avvio quando un ruolo di lavoro richiede il processo. Infine, lo stato diventa In esecuzione quando viene avviata l'esecuzione effettiva del runbook.
Al termine del processo del runbook, viene visualizzato l'output nella pagina di test. L'output dovrebbe essere simile all'immagine seguente:
Esaminare l'output. Tutti gli elementi nel blocco
Parallel
, incluso il comandoStart-Sleep
, vengono eseguiti contemporaneamente. Gli stessi comandi all'esterno del bloccoParallel
vengono eseguiti in sequenza, come illustrato dai diversi timestamp di data.Chiudere la pagina Test per tornare al pannello Canvas.
Pubblicare e avviare il runbook
Il runbook creato è ancora in modalità bozza. È necessario pubblicarlo prima di poterlo eseguire in produzione. Quando si pubblica un runbook, è possibile sovrascrivere la versione pubblicata esistente con la versione bozza. In questo caso, non esiste ancora una versione pubblicata perché il runbook è appena stato creato.
Selezionare Pubblica per pubblicare il runbook, quindi Sì quando richiesto.
Il campo Stato ora mostra Pubblicato. Esaminare le opzioni nella parte superiore che consentono di avviare il runbook adesso, pianificarlo per un'ora di inizo in futuro o creare un webhook per poterlo avviare con una chiamata HTTP. Selezionare Avvia e poi Sì quando richiesto per avviare il runbook.
Viene visualizzata una pagina Processo per il processo del runbook creato. In questo caso, lasciare aperta la pagina per poter controllare lo stato del processo. Il campo Stato corrisponde agli stati visualizzati durante il test del runbook.
Quando lo stato del runbook risulta Completato, selezionare Output. L'output dovrebbe essere simile all'output del test.
Chiudere la pagina Processo per tornare alla pagina Panoramica del runbook.
In Risorse, selezionare Processi. In questa pagina sono elencati tutti i processi creati dal runbook. Dovrebbe essere elencato un solo processo, perché il processo è stato eseguito una sola volta.
Selezionare il processo per aprire la stessa pagina Processo visualizzata quando è stato avviato il runbook. Utilizzare questa pagina per visualizzare i dettagli di qualsiasi processo creato per il runbook. Chiudere la pagina Processo per tornare alla pagina Panoramica del runbook.
Aggiungere l'autenticazione per gestire le risorse di Azure
Il runbook è stato testato e pubblicato, ma finora non esegue alcuna attività utile. Si vuole fare in modo che gestisca le risorse di Azure. Ma potrà procedere solo eseguendo l'autenticazione con le credenziali per la sottoscrizione. Il runbook usa l'identità gestita assegnata dal sistema dell'account di Automazione per eseguire l'autenticazione con Azure per eseguire l'azione di gestione sulla macchina virtuale. Il runbook può essere facilmente modificato per usare un'identità gestita assegnata dall'utente.
Selezionare Panoramica e quindi Modifica per aprire l'editor di testo.
Sostituire il codice esistente con quello seguente:
workflow MyFirstRunbook-Workflow { $resourceGroup = "resourceGroupName" # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" }
Modificare la variabile
$resourceGroup
con un valore valido che rappresenta il gruppo di risorse.Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:
- Dalla riga 9 rimuovere
Connect-AzAccount -Identity
, - Sostituirlo con
Connect-AzAccount -Identity -AccountId <ClientId>
e - Immettere l'ID client ottenuto in precedenza.
- Dalla riga 9 rimuovere
Selezionare Salva e quindi Riquadro di test.
Selezionare Avvia per avviare il test. Al termine verrà visualizzato un output simile al seguente, con le informazioni di base dell'account. Questa azione conferma che le credenziali sono valide.
Chiudere la pagina Test per tornare al pannello Canvas.
Aggiungere il codice per avviare una macchina virtuale
Ora che il runbook esegue l'autenticazione per la sottoscrizione di Azure è possibile gestire le risorse. Aggiungere un comando per avviare una macchina virtuale. È possibile selezionare una macchina virtuale qualsiasi nella sottoscrizione di Azure. Per ora il nome sarà hardcoded nel runbook.
Aggiungere il codice seguente come ultima riga immediatamente prima della parentesi graffa di chiusura. Sostituire
VMName
con il nome effettivo di una macchina virtuale.Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
Testare il runbook e verificare che la macchina virtuale sia stata avviata. Tornare quindi all'area di disegno.
Aggiungere parametri di input al runbook
Il runbook avvia effettivamente la macchina virtuale hardcoded nel runbook. Sarà più utile se è possibile specificare la macchina virtuale all'avvio del runbook. Per fornire questa funzionalità, si aggiungeranno dei parametri di input al runbook.
Sostituire la riga 3,
$resourceGroup = "resourceGroupName"
, con quanto segue:Param( [string]$resourceGroup, [string]$VMName )
Sostituire il comando
Start-AzVM
precedente con quanto segue:Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
Testare il runbook e verificare che la macchina virtuale sia stata avviata. Tornare quindi all'area di disegno.
Gestire più macchine virtuali contemporaneamente
È possibile usare il costrutto ForEach -Parallel
per elaborare i comandi per ogni elemento di una raccolta simultaneamente. Rivedere il codice in modo che il runbook ora:
- Accettare una raccolta di nomi di macchine virtuali,
- Accettare un parametro per arrestare o avviare le macchine virtuali e
- Eseguire le azioni in parallelo su tutte le macchine virtuali
Sostituire tutto il codice esistente con il codice seguente:
workflow MyFirstRunbook-Workflow { param ( [string]$resourceGroup, [string[]]$VMs, [string]$action ) # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity Connect-AzAccount -Identity # set and store context $AzureContext = Set-AzContext -SubscriptionId "<SubscriptionID>" # Start or stop VMs in parallel if ($action -eq "Start") { ForEach -Parallel ($vm in $VMs) { Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext } } elseif ($action -eq "Stop") { ForEach -Parallel ($vm in $VMs) { Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force } } else { Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'." } }
Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:
- Dalla riga 9 rimuovere
Connect-AzAccount -Identity
, - Sostituirlo con
Connect-AzAccount -Identity -AccountId <ClientId>
e - Immettere l'ID client ottenuto in precedenza.
- Dalla riga 9 rimuovere
Selezionare Salva, quindi Pubblica, quindi Sì quando richiesto.
Nella pagina Panoramica selezionare Avvia.
Popolare i parametri e quindi selezionare OK.
Parametro Descrizione RESOURCEGROUP Immettere il nome del gruppo di risorse delle macchine virtuali. Macchine virtuali Immettere i nomi delle macchine virtuali usando la sintassi seguente: ["VM1","VM2","VM3"]
Azione Immettere stop
ostart
.Passare all'elenco di macchine virtuali e aggiornare la pagina ogni pochi secondi. Osservare che l'azione per ogni macchina virtuale avviene in parallelo. Senza la parola chiave
-Parallel
, le azioni sarebbero state eseguite in sequenza. Mentre le macchine virtuali verranno avviate in parallelo, ciascuna macchina virtuale può raggiungere la fase In esecuzione in momenti leggermente diversi, in base alle sue caratteristiche.
Pulire le risorse
Se non si intende continuare a usare questo runbook, eliminarlo con la procedura seguente:
- Passare all'account di Automazione.
- In Automazione processi selezionare Runbook.
- Selezionare il Runbook.
- Nella pagina Panoramica del runbook, selezionare Elimina.
Passaggi successivi
In questa esercitazione è stato creato un runbook del flusso di lavoro di PowerShell. Per un'analisi dei runbook Python 3, vedere: