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.
Sie können Vorwartungs- und Nachwartungsereignisse verwenden, um benutzerdefinierte Aktionen vor und nach der geplanten Patchinstallation auszuführen. Eines der am häufigsten verwendeten Szenarien ist das Starten und Beenden eines virtuellen Computers (VM). Mit Ereignissen vor der Wartung können Sie ein Skript ausführen, um den virtuellen Computer zu starten, bevor Sie den geplanten Patchprozess initiieren. Nachdem der geplante Patchvorgang abgeschlossen ist und der Server neu gestartet wird, können Sie ein Skript ausführen, um den virtuellen Computer sicher herunterzufahren.
In diesem Lernprogramm wird erläutert, wie Sie Vorabwartungs- und Nachwartungsereignisse erstellen, um einen virtuellen Computer in einem geplanten Patchworkflow mithilfe eines Webhooks zu starten und zu beenden.
In diesem Tutorial erfahren Sie:
- Erstellen und Veröffentlichen eines Azure Automation-Runbook.
- Fügen Sie Webhooks hinzu.
- 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 und Veröffentlichen eines Automatisierungs-Runbooks
Melden Sie sich beim Azure-Portal an, und wechseln Sie zu Ihrem Azure Automation-Konto .
Erstellen und veröffentlichen Sie ein Automatisierungs-Runbook.
Wenn Sie Runbooks für Vorwartungs- und Nachwartungsaufgaben in Azure Automation Update Management verwendet haben, ist es wichtig, dass Sie die folgenden Schritte ausführen, um unerwartete Auswirkungen auf Ihre Computer zu vermeiden und fehlerhafte Wartungsläufe zu vermeiden:
Parsen Sie für Ihre Runbooks die Webhook-Nutzlast, um sicherzustellen, dass sie nur für Ereignisse vom Typ
Microsoft.Maintenance.PreMaintenanceEventoderMicrosoft.Maintenance.PostMaintenanceEventausgelöst wird. Standardmäßig werden Webhooks für andere Abonnementereignisse ausgelöst, wenn ein anderes Ereignis mit demselben Endpunkt hinzugefügt wird.Weitere Informationen finden Sie unter Azure Event Grid-Ereignisschema.
Weitere Informationen finden Sie im Ereignisrasterschema speziell für Wartungskonfigurationen.
Sehen Sie sich den folgenden Code an:
param ( [Parameter(Mandatory=$false)] [object] $WebhookData ) $notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody $eventType = $notificationPayload[0].eventType if ($eventType -ne "Microsoft.Maintenance.PreMaintenanceEvent" -and $eventType –ne "Microsoft.Maintenance.PostMaintenanceEvent" ) { Write-Output "Webhook not triggered as part of pre or post patching for maintenance run" return }
Der Parameter "SoftwareUpdateConfigurationRunContext " enthält Informationen zu Listen von Computern in der Updatebereitstellung. Sie wird nicht an die Skripts übergeben, wenn Sie sie für Ereignisse vor oder nach der Wartung verwenden und dabei einen Automation-Webhook nutzen. Sie können entweder die Liste der Maschinen von Azure Resource Graph abfragen oder die Liste der Maschinen in den Skripten codieren lassen.
Stellen Sie sicher, dass den verwalteten Identitäten, die Sie im Skript verwenden, die richtigen Rollen und Berechtigungen gewährt werden, um Ressourcendiagrammabfragen auszuführen und Maschinen zu starten oder zu stoppen.
Sehen Sie sich die Berechtigungen im Zusammenhang mit Resource Graph-Abfragen an.
Siehe die Rolle "Beitragende für virtuelle Maschinen".
Siehe die Webhook-Nutzlast.
Sehen Sie sich den folgenden Code an:
param ( [Parameter(Mandatory=$false)] [object] $WebhookData ) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody $maintenanceRunId = $notificationPayload[0].data.CorrelationId $resourceSubscriptionIds = $notificationPayload[0].data.ResourceSubscriptionIds if ($resourceSubscriptionIds.Count -gt 0) { 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 $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 } }
Zum Anpassen können Sie entweder Ihre vorhandenen Skripts mit den vorherigen Änderungen verwenden oder die folgenden Skripts verwenden.
Beispielskripts
param
(
[Parameter(Mandatory=$false)]
[object] $WebhookData
)
Connect-AzAccount -Identity
# Install the Resource Graph module from PowerShell Gallery
# Install-Module -Name Az.ResourceGraph
$notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody
$eventType = $notificationPayload[0].eventType
if ($eventType -ne "Microsoft.Maintenance.PreMaintenanceEvent") {
Write-Output "Webhook not triggered as part of pre-patching for maintenance run"
return
}
$maintenanceRunId = $notificationPayload[0].data.CorrelationId
$resourceSubscriptionIds = $notificationPayload[0].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
}
}
Hinzufügen von Webhooks
Fügen Sie Webhooks zu den vorherigen veröffentlichten Runbooks hinzu, und kopieren Sie die Webhook-URLs.
Hinweis
Achten Sie darauf, die URL nach dem Erstellen eines Webhooks zu kopieren. Sie können die URL nicht erneut abrufen.
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 Web Hook-Endpunkt und dann " Endpunkt konfigurieren" aus.
Geben Sie die entsprechenden Details an, etewa die Webhook-URL für das Ereignis vor oder nach der Wartung, um das Ereignis auszulösen.
Klicken Sie auf Erstellen.
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 Mithilfe von Azure Functions Vorabwartungs- und Nachwartungsereignisse erstellen.