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 a PowerShell 5.1; PowerShell 7.1 (anteprima) e PowerShell 7.2 non supportano i flussi di lavoro.

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 e Az.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. Per 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.

  1. Accedere al portale di Azure e passare all'account di Automazione.

  2. In Account Impostazioni selezionare Identità (anteprima).

  3. Nella scheda Assegnata dal sistema, in Autorizzazioni selezionare Assegnazioni di ruolo di Azure per aprire la pagina Assegnazioni di ruolo di Azure.

    Selecting Azure role assignments in portal.

  4. Selezionare + Aggiungi assegnazione di ruolo (anteprima) per aprire la pagina Aggiungi assegnazione di ruolo (anteprima).

    Add role assignments in portal.

  5. Selezionare i valori appropriati.

    Proprietà Description
    Ambito L'ambito è un set di risorse a cui si applica l'assegnazione di ruolo. Nell'elenco a discesa selezionare Gruppo di risorse.
    Abbonamento 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 DevTest Labs User (Utente di DevTest Labs).
  6. Selezionare Salva e quindi chiudere la pagina Assegnazioni di ruolo di Azure per tornare alla scheda Assegnata dal sistema .

  7. Selezionare la scheda Assegnata dall'utente .

  8. Selezionare l'identità gestita assegnata dall'utente dall'elenco per aprire la pagina Identità gestita.

    Selecting user-assigned managed identity in portal.

  9. Prendere nota dell'ID client per un uso successivo.

    Showing Client ID for managed identity in portal

  10. 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).

    Add role assignments in portal for user-assigned identity.

  11. Selezionare i valori appropriati.

    Proprietà Description
    Ambito Nell'elenco a discesa selezionare Gruppo di risorse.
    Abbonamento 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 DevTest Labs User (Utente di DevTest Labs).
  12. 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 il pannello >Runbook Crea un runbook, viene visualizzata una nuova pagina Crea un runbook con le opzioni applicabili.

  1. Nella pagina apri account di Automazione, in Automazione processi selezionare Runbook

    Create PowerShell workflow runbook from portal

  2. Selezionare + Crea un runbook.

    1. Denominare il runbook. Ad esempio, testare.
    2. Nel menu a discesa Tipo di runbook selezionare Flusso di lavoro PowerShell.
    3. Nell'elenco a discesa Versione di runtime selezionare 5.1.
    4. Immettere la descrizione applicabile.
    5. Seleziona Crea.

    PowerShell workflow runbook options from portal

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
{
}
  1. È 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 -s 3
         Get-Date
     }
    
    Write-Output " `r`n"
    Write-Output "Non-Parallel"
    Get-Date
    Start-Sleep -s 3
    Get-Date
    
  2. 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.

  1. Selezionare Riquadro test per aprire la pagina Test .

  2. Selezionare Avvia per avviare il test. Viene creato un processo del runbook e lo 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.

  3. Al termine del processo del runbook, nella pagina Test viene visualizzato l'output. L'output dovrebbe essere simile all'immagine seguente:

    PowerShell workflow runbook parallel output

    Esaminare l'output. Tutti gli elementi del Parallel blocco, incluso il Start-Sleep comando , vengono eseguiti contemporaneamente. Gli stessi comandi all'esterno del Parallel blocco vengono eseguiti in sequenza, come illustrato dai diversi timestamp di data.

  4. Chiudere la pagina Test per tornare all'area di disegno.

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.

  1. Selezionare Pubblica per pubblicare il runbook, quindi quando richiesto.

  2. Il campo Stato ora mostra Pubblicato. Esaminare le opzioni in alto che consentono di avviare il runbook ora, pianificare un'ora di inizio futura o creare un webhook in modo che il runbook possa essere avviato tramite una chiamata HTTP. Selezionare Avvia e poi quando richiesto per avviare il runbook.

    PowerShell workflow runbook overview page

  3. Viene visualizzata una pagina Processo per il processo del runbook creato. In questo caso, lasciare aperta la pagina in modo da poter controllare lo stato di avanzamento del processo. Il campo Stato corrisponde agli stati visualizzati durante il test del runbook.

    Screenshot of the runbook Job page.

  4. Quando lo stato del runbook risulta Completato, selezionare Output. L'output dovrebbe essere simile all'output del test.

  5. Chiudere la pagina Processo per tornare alla pagina Panoramica del runbook.

  6. 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.

  7. Selezionare il processo per aprire la stessa pagina processo visualizzata all'avvio del 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.

  1. Selezionare Panoramica e quindi Modifica per aprire l'editor di testo.

  2. 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 $resourceGroup variabile con un valore valido che rappresenta il gruppo di risorse.

  3. 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:

    1. Dalla riga 9 rimuovere Connect-AzAccount -Identity,
    2. Sostituirlo con Connect-AzAccount -Identity -AccountId <ClientId>e
    3. Immettere l'ID client ottenuto in precedenza.
  4. Selezionare Salva e quindi Riquadro di test.

  5. 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.

    Basic information that confirms credentials.

  6. Chiudere la pagina Test per tornare all'area di disegno.

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.

  1. 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
    
  2. 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 attualmente la macchina virtuale hardcoded nel runbook. Sarà più utile se è possibile specificare la macchina virtuale all'avvio del runbook. Aggiungere parametri di input al runbook per fornire tale funzionalità.

  1. Sostituire la riga 3, $resourceGroup = "resourceGroupName", con quanto segue:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Sostituire il comando precedente Start-AzVM con quanto segue:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. 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
  1. 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'."
       }
       }
    
  2. 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:

    1. Dalla riga 9 rimuovere Connect-AzAccount -Identity,
    2. Sostituirlo con Connect-AzAccount -Identity -AccountId <ClientId>e
    3. Immettere l'ID client ottenuto in precedenza.
  3. Selezionare Salva, quindi Pubblica, quindi quando richiesto.

  4. Nella pagina Panoramica selezionare Avvia.

  5. 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 o start.
  6. 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 -Parallel parola chiave , le azioni sarebbero state eseguite in sequenza. Mentre le macchine virtuali verranno avviate in sequenza, ogni macchina virtuale può raggiungere la fase in esecuzione in momenti leggermente diversi in base alle caratteristiche di ogni macchina virtuale.

Pulire le risorse

Se non si intende continuare a usare questo runbook, eliminarlo con la procedura seguente:

  1. Passare all'account di Automazione.
  2. In Automazione processi selezionare Runbook.
  3. Selezionare il Runbook.
  4. 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: