Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ Windows-VMs ✔️ Linux-VMs ✔️ Lokale Umgebung ✔️ Azure-VMs ✔️ Azure Arc-fähige Server.
In diesem Tutorial wird erläutert, wie Sie Ereignisse vor und nach der Wartung erstellen, um einen virtuellen Computer in einem geplanten Patchworkflow mithilfe von Azure Functions zu starten und zu beenden.
In diesem Tutorial lernen Sie Folgendes:
- Erstellen einer Funktions-App.
- Erstellen Sie eine Funktion.
- Erstellen Sie ein Ereignisabonnement.
Voraussetzungen
Stellen Sie sicher, dass Sie ein PowerShell 7.4-Runbook verwenden.
Weisen Sie der entsprechenden verwalteten Identität Berechtigungen zu. Das Runbook kann die vom System zugewiesene verwaltete Identität des Automatisierungskontos oder eine vom Benutzer zugewiesene verwaltete Identität verwenden.
Die folgenden Skriptbeispiele (Starten und Beenden von VMs) erfordern die Rolle "Mitwirkender virtueller Computer" oder eine benutzerdefinierte Rolle mit diesen spezifischen Berechtigungen:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/action
- Microsoft.Compute/virtualMachines/powerOff/action
Sie können entweder das Azure-Portal oder Azure PowerShell-Cmdlets verwenden, um jeder Identität Berechtigungen zuzuweisen:
Führen Sie zum Zuweisen von Berechtigungen die Schritte unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals aus.
- Importieren Sie das
Az.ResourceGraphModul. 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.
Wechseln Sie zu der Ressource, und laden Sie die Abhängigkeiten mithilfe der folgenden Schritte.
Hinweis
Sie müssen die Abhängigkeiten nur beim ersten Mal laden. Wenn die PowerShell-Abhängigkeiten nicht geladen werden, überprüfen Sie die neuesten Versionen von
AzundAz.ResourceGraph.Wählen Sie für die Funktions-AppApp-Dateien aus.
Legen Sie unter host.json"ManagedDependency auf „True“ fest, und wählen Sie requirements.psd1 aus.
Fügen Sie unter "requirements.psd1" den folgenden Code ein:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Wählen Sie Speichern aus.
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
Nachdem Sie die Funktions-App erstellt haben, wechseln Sie zur Ressource, wechseln Sie zu "Übersicht", und wählen Sie dann " Erstellen" im Azure-Portal aus.
Wählen Sie im Bereich Funktion erstellen die folgenden Optionen aus:
Wählen Sie im Funktionsbereich "Ereignisraster" im linken Menü Code+Test aus. Fügen Sie den folgenden Code ein, und wählen Sie dann "Speichern" aus.
# Make sure that you're using eventGridEvent for parameter binding in the 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. Geben Sie für Trigger den Namenswert des Ereignistriggerparameters ein. Verwenden Sie denselben Parameternamen, der im Fenster Programmieren und testen angegeben ist. Im Beispiel lautet
eventGridEventder Parameter .Wählen Sie Speichern aus.
Erstellen eines Ereignisabonnements
Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Azure Update Manager.
Wählen Sie unter "Verwalten" die Option "Maschinen>Wartungskonfiguration" aus.
Wählen Sie im Bereich "Wartungskonfiguration " die Konfiguration aus.
Wählen Sie unter Einstellungen die Option Ereignisse aus.
Wählen Sie +Ereignisabonnement aus, um ein Ereignis vor der Wartung oder nach der Wartung zu erstellen.
Geben Sie im Bereich " Ereignisabonnement erstellen" im Abschnitt " Ereignisabonnementdetails " einen geeigneten Namen an. Behalten Sie für das Schema die Option Event Grid-Schema bei.
Wählen Sie im Abschnitt Ereignistypen für Nach Ereignistypen filtern die Option Ereignis vor der Wartung oder Ereignis nach der Wartung aus.
Wählen Sie im Abschnitt "Endpunktdetails " den Azure-Funktionsendpunkt und dann " Endpunkt konfigurieren" aus.
Geben Sie die entsprechenden Details an, z. B. die Ressourcengruppe und die Funktions-App, um das Ereignis auszulösen.
Klicken Sie auf Erstellen.
Sie können auch Azure Storage-Konten und einen Event Hub verwenden, um Ereignisse zu speichern, zu senden und zu empfangen. Weitere Informationen finden Sie in den Schnellstarts zum Erstellen einer Warteschlange in Azure Storage und zum Erstellen eines Event Hubs mithilfe des Azure-Portals.
Verwandte Inhalte
- Erhalten Sie einen Überblick über Ereignisse vor der Wartung und nach der Wartung in Azure Update Manager.
- Erfahren Sie mehr über das Erstellen von Ereignissen vor und nach der Wartung.
- Erfahren Sie , wie Sie Ereignisse vor und nach der Wartung verwalten oder einen geplanten Lauf stornieren.
- Erfahren Sie , wie Sie Ereignisse vor der Wartung und Ereignisse nach der Wartung mithilfe eines Webhooks mit Automatisierungs-Runbooks erstellen.