Tutorial: Erstellen von Prä- und Postereignissen mit Azure Functions
Gilt für: ✔️ Windows-VMs ✔️ Linux-VMs ✔️ Lokale Umgebung ✔️ Azure-VMs ✔️ Azure Arc-fähige Server.
In diesem Tutorial wird erläutert, wie Sie Vor- und Nachbereitungsereignisse erstellen, um mithilfe von Azure Functions eine VM in einem Patchworkflow für einen Zeitplan zu starten und zu beenden.
In diesem Tutorial lernen Sie Folgendes:
- Voraussetzungen
- Erstellen einer Funktionen-App
- Erstellen einer Funktion
- Erstellen eines Ereignisabonnements
Voraussetzungen
Stellen Sie sicher, dass Sie das PowerShell 7.2-Runbook verwenden.
Zuweisen von Berechtigungen zu verwalteten Identitäten – Sie können Berechtigungen für die entsprechende verwaltete Identität zuweisen. Das Runbook kann die systemseitig zugewiesene verwaltete Identität des Automation-Kontos oder eine benutzerseitig zugewiesene verwaltete Identität verwenden.
Sie können entweder Portal- oder PowerShell-Cmdlets verwenden, um jeder Identität Berechtigungen zuzuweisen:
Führen Sie die Schritte unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals aus, um Berechtigungen zuzuweisen
- Importieren Sie das
Az.ResourceGraph
-Modul, und stellen Sie sicher, dass das Modul mit der Modulversion 2.0.3 auf ThreadJob aktualisiert wird.
Erstellen einer Funktionen-App
Führen Sie die Schritte zum Erstellen einer Funktions-App aus.
Nachdem Sie die Funktions-App erstellt haben, wechseln Sie zu „Ressource“, und stellen Sie sicher, dass Sie die Abhängigkeiten mithilfe der folgenden Schritte laden:
Hinweis
Sie müssen die Abhängigkeiten lediglich beim ersten Mal laden. Wenn die PowerShell-Abhängigkeiten nicht geladen werden können. Überprüfen Sie die neuesten Versionen von AZ und AZ.ResourceGraph.
Wählen Sie in der Funktions-App App-Dateien aus.
Legen Sie in der Datei host.json ManagedDependecy auf True fest, und wählen Sie die Datei requirements.psd1 aus.
Fügen Sie in der Datei requirements.psd1 den folgenden Code ein:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
Wählen Sie Speichern.
Starten Sie über die Registerkarte Übersicht die Funktions-App neu, um die in der Datei requirements.psd1 aufgeführten Abhängigkeiten zu laden.
Erstellen einer Funktion
Wechseln Sie nach dem Erstellen der Funktions-App zu Resource, und wählen Sie in der Übersicht Im Azure-Portal erstellen aus.
Wählen Sie im Fenster Funktion erstellen die folgenden Optionen aus:
Wählen Sie in der Event Grid-Funktion im linken Menü Programmieren und testen aus, fügen Sie den folgenden Code ein, und wählen Sie Speichern aus.
# 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 } }
Wählen Sie im linken Menü Integration aus, und bearbeiten Sie unter Trigger Parametername für Ereignistrigger. Verwenden Sie denselben Parameternamen, der im Fenster Programmieren und testen angegeben ist. Im Beispiel lautet der Parameter eventGridEvent.
Wählen Sie Speichern aus.
Erstellen eines Ereignisabonnements
- Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Azure Update Manager.
- Wählen Sie unter Verwalten erst Computer und dann Wartungskonfiguration aus.
- Wählen Sie auf der Seite Wartungskonfiguration die Konfiguration aus.
- Wählen Sie unter Einstellungen die Option Ereignisse aus.
- Wählen Sie + Ereignisabonnement aus, um ein Ereignis vor oder nach der Wartung zu erstellen.
- Geben Sie auf der Seite Ereignisabonnement erstellen die folgenden Details ein:
- Geben Sie im Abschnitt Details zum Ereignisabonnement einen geeigneten Namen an.
- Behalten Sie für das Schema die Option Event Grid-Schema bei.
- Wählen Sie im Abschnitt Ereignistypen Nach Ereignistypen filtern.
- Wählen Sie Vorwartungsereigniss für ein Preereignis aus.
- Wählen Sie im Abschnitt Details zum Endpunkt den Endpunkt Azure Functions aus, und wählen Sie Konfigurieren und Endpunkt aus.
- Geben Sie die entsprechenden Details wie Ressourcengruppen und Funktions-App an, um das Ereignis auszulösen.
- Wählen Sie Nachwartungsereigniss für ein Postereignis aus.
- Wählen Sie im Abschnitt Details zum Endpunkt den Endpunkt Azure Functions aus, und wählen Sie Konfigurieren und Endpunkt aus.
- Geben Sie die entsprechenden Details wie Ressourcengruppen und Funktions-App an, um das Ereignis auszulösen.
- Wählen Sie Vorwartungsereigniss für ein Preereignis aus.
- Klicken Sie auf Erstellen.
Sie können außerdem Azure Storage-Konten und einen Event Hub zum Speichern, Senden und Empfangen von Ereignissen verwenden. Weitere Informationen finden Sie unter Erstellen eines Event Hubs und Storage-Warteschlangen.
Nächste Schritte
- Erfahren Sie mehr über die Übersicht über Vor- und Nachbereitungsereignisse in Azure Update Manager.
- Weitere Informationen zum Erstellen von Vor- und Nachbereitungsereignissen
- Informationen zum Verwalten von Vor- und Nachbereitungsereignissen oder zum Abbrechen einer geplanten Ausführung finden Sie unter Vor- und Nachbereitungsereignisse für eine Wartungskonfiguration.
- Erfahren Sie mehr über das Erstellen von Vor- und Nachbereitungsereignissen mithilfe eines Webhooks mit Automatisierung.