Tutorial: Creare eventi pre e post usando Funzioni di Azure
Si applica a: ✔️ Macchine virtuali Windows ✔️ Macchine virtuali Linux ✔️ Ambiente locale ✔️ Macchine virtuali Azure ✔️ Server abilitati per Azure Arc.
Questa esercitazione illustra come creare pre-eventi e post-eventi per avviare e arrestare una macchina virtuale in un flusso di lavoro delle patch di pianificazione usando Funzioni di Azure.
In questa esercitazione apprenderai a:
- Prerequisiti
- Creare un'app per le funzioni
- Creare una funzione
- Creare una sottoscrizione di eventi
Prerequisiti
Assicurarsi di usare il runbook di PowerShell 7.2.
Assegnare l’autorizzazione alle identità gestite: è possibile assegnare autorizzazioni all’identità gestita appropriata. Il runbook può usare l'identità gestita assegnata dal sistema dell'account di Automazione o un'identità gestita assegnata dall'utente.
È possibile usare il portale o i cmdlet di PowerShell per assegnare autorizzazioni a ogni identità:
Seguire la procedura descritta in Assegnare i ruoli di Azure usando il portale di Azure per assegnare le autorizzazioni
- Importare il modulo
Az.ResourceGraph
, assicurarsi che il modulo sia aggiornato a ThreadJob con la versione 2.0.3 del modulo.
Creare un'app per le funzioni
Seguire la procedura per Creare un’app per le funzioni.
Dopo aver creato l’app per le funzioni, passare alla risorsa, assicurarsi di caricare le dipendenze seguendo questa procedura:
Nota
È necessario caricare le dipendenze solo per la prima volta. Se le dipendenze di PowerShell non vengono caricate. Controllare le versioni più recenti di AZ e AZ. ResourceGraph.
Nell’app per le funzioni, selezionare File dell’app.
In host.json, impostare ManagedDependecy su True e selezionare requirements.psd1.
In requirements.psd1, incollare il codice seguente:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
Seleziona Salva.
Riavviare l’app per le funzioni dalla scheda Panoramica per caricare le dipendenze indicate nel file requirements.psd1.
Creare una funzione
Dopo aver creato l’app per le funzioni, passare a Risorsa e in Panoramica, selezionare Crea nel portale di Azure.
Nella finestra Crea funzione, effettuare le selezioni seguenti:
Nella funzione Griglia di eventi, selezionare Codice e test dal menu a sinistra, incollare il codice seguente e selezionare Salva.
# Make sure that we are using eventGridEvent for parameter binding in Azure function. param($eventGridEvent, $TriggerMetadata) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $maintenanceRunId = $eventGridEvent.data.CorrelationId $resourceSubscriptionIds = $eventGridEvent.data.ResourceSubscriptionIds if ($resourceSubscriptionIds.Count -eq 0) { Write-Output "Resource subscriptions are not present." break } Write-Output "Querying ARG to get machine details [MaintenanceRunId=$maintenanceRunId][ResourceSubscriptionIdsCount=$($resourceSubscriptionIds.Count)]" $argQuery = @" maintenanceresources | where type =~ 'microsoft.maintenance/applyupdates' | where properties.correlationId =~ '$($maintenanceRunId)' | where id has '/providers/microsoft.compute/virtualmachines/' | project id, resourceId = tostring(properties.resourceId) | order by id asc "@ Write-Output "Arg Query Used: $argQuery" $allMachines = [System.Collections.ArrayList]@() $skipToken = $null do { $res = Search-AzGraph -Query $argQuery -First 1000 -SkipToken $skipToken -Subscription $resourceSubscriptionIds $skipToken = $res.SkipToken $allMachines.AddRange($res.Data) } while ($skipToken -ne $null -and $skipToken.Length -ne 0) if ($allMachines.Count -eq 0) { Write-Output "No Machines were found." break } $jobIDs= New-Object System.Collections.Generic.List[System.Object] $startableStates = "stopped" , "stopping", "deallocated", "deallocating" $allMachines | ForEach-Object { $vmId = $_.resourceId $split = $vmId -split "/"; $subscriptionId = $split[2]; $rg = $split[4]; $name = $split[8]; Write-Output ("Subscription Id: " + $subscriptionId) $mute = Set-AzContext -Subscription $subscriptionId $vm = Get-AzVM -ResourceGroupName $rg -Name $name -Status -DefaultProfile $mute $state = ($vm.Statuses[1].DisplayStatus -split " ")[1] if($state -in $startableStates) { Write-Output "Starting '$($name)' ..." $newJob = Start-ThreadJob -ScriptBlock { param($resource, $vmname, $sub) $context = Set-AzContext -Subscription $sub; Start-AzVM -ResourceGroupName $resource -Name $vmname -DefaultProfile $context} -ArgumentList $rg, $name, $subscriptionId $jobIDs.Add($newJob.Id) } else { Write-Output ($name + ": no action taken. State: " + $state) } } $jobsList = $jobIDs.ToArray() if ($jobsList) { Write-Output "Waiting for machines to finish starting..." Wait-Job -Id $jobsList } foreach($id in $jobsList) { $job = Get-Job -Id $id if ($job.Error) { Write-Output $job.Error } }
Selezionare Integrazione nel menu a sinistra e modificare il nome del parametro del trigger di eventi in Trigger. Usare lo stesso nome di parametro specificato nella finestra Codice e test. Nell’esempio, il parametro è eventGridEvent.
Seleziona Salva
Creare una sottoscrizione di eventi
- Accedere al portale di Azure e passare a Gestore aggiornamenti di Azure.
- In Gestisci, selezionare Computer, Configurazione di manutenzione.
- Nella pagina Configurazione di manutenzione, selezionare la configurazione.
- In Impostazioni, selezionare Eventi.
- Selezionare Crea sottoscrizione di eventi per creare un pre-evento o post-evento di manutenzione.
- Nella pagina Crea sottoscrizione di eventi, immettere i dettagli seguenti:
- Nella sezione Dettagli sottoscrizione eventi specificare un nome appropriato.
- Mantenere lo schema come schema di Griglia di eventi.
- Nella sezione Tipi di eventi, Filtrare in base ai tipi di eventi.
- Selezionare Pre-evento di manutenzione per un pre-evento.
- Nella sezione Dettagli endpoint, selezionare l’endpoint Funzione di Azure e selezionare Configura ed endpoint.
- Specificare i dettagli appropriati, ad esempio Gruppi di risorse, app per le funzioni per attivare l’evento.
- Selezionare Post-evento di manutenzione per un post-evento.
- Nella sezione Dettagli endpoint, l’endpoint Funzione di Azure e selezionare Configura ed endpoint.
- Specificare i dettagli appropriati, ad esempio Gruppo di risorse, App per le funzioni per attivare l’evento.
- Selezionare Pre-evento di manutenzione per un pre-evento.
- Seleziona Crea.
È anche possibile usare gli account di Archiviazione di Azure e l’hub eventi per archiviare, inviare e ricevere eventi. Altre informazioni su Come creare un hub eventi e Code di archiviazione.
Passaggi successivi
- Altre informazioni sulla panoramica dei pre-eventi e post-eventi in Gestore aggiornamenti di Azure.
- Altre informazioni su Come creare pre-eventi e post-eventi
- Per informazioni su come gestire pre-eventi e post-eventi o annullare un’esecuzione pianificata, vedere Pre-eventi e post-eventi di configurazione di manutenzione.
- Altre informazioni su Creare pre-eventi e post-eventi usando un webhook con Automazione.