Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: ✔️ Virtuální počítače s Windows ✔️ Virtuální počítače s Linuxem ✔️ Místní prostředí (on-premises) ✔️ Virtuální počítače Azure ✔️ Servery s podporou Azure Arc.
Události před údržbou a po údržbě můžete použít ke spouštění akcí definovaných uživatelem před a po plánované instalaci oprav. Jedním z nejběžnějších scénářů je spuštění a zastavení virtuálního počítače. Při událostech předběžné údržby můžete spustit skript, který spustí virtuální počítač před zahájením naplánovaného procesu oprav. Po dokončení plánovaných oprav a restartování serveru můžete spustit skript pro bezpečné vypnutí virtuálního počítače.
Tento kurz vysvětluje, jak pomocí webhooku vytvořit události předběžné údržby a po údržbě pro spuštění a zastavení virtuálního počítače v naplánovaném pracovním postupu oprav.
V tomto kurzu se naučíte:
- Vytvořte a publikujte runbook pro Azure Automation.
- Přidání webhooků
- Vytvořte odběr události.
Požadavky
Ujistěte se, že používáte runbook verze PowerShellu 7.4.
Přiřaďte oprávnění příslušné spravované identitě. Runbook může používat systémem přiřazenou spravovanou identitu účtu Automation nebo spravovanou identitu přiřazenou uživatelem.
Následující příklady skriptů (spouštění a zastavování virtuálních počítačů) vyžadují roli Přispěvatel virtuálních počítačů nebo vlastní roli s těmito konkrétními oprávněními:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/akce dokončení restartu
- Microsoft.Compute/virtualMachines/powerOff/action
K přiřazení oprávnění jednotlivým identitám můžete použít azure Portal nebo rutiny Azure PowerShellu:
Pokud chcete přiřadit oprávnění, postupujte podle kroků v tématu Přiřazení rolí Azure pomocí webu Azure Portal.
- Importujte
Az.ResourceGraphmodul. Ujistěte se, že je modul aktualizovaný na ThreadJob s modulem verze 2.0.3.
Vytvoření a publikování runbooku Automation
Přihlaste se k webu Azure Portal a přejděte ke svému účtu Azure Automation .
Vytvoření a publikování runbooku Automation
Pokud jste runbooky používali pro úlohy před údržbou a po údržbě ve službě Azure Automation Update Management, je důležité, abyste se vyhnuli neočekávanému dopadu na vaše počítače a selhání spuštění údržby:
V případě vašich runbooků parsujte datovou část webhooku, abyste zajistili, že se aktivuje pouze u událostí
Microsoft.Maintenance.PreMaintenanceEventneboMicrosoft.Maintenance.PostMaintenanceEvent. Webhooky jsou navrženy tak, aby se aktivovaly při jiných událostech odběru, pokud je přidána jiná událost se stejným koncovým bodem.Podívejte se na schéma událostí Azure Event Gridu.
Podívejte se na schéma Event Gridu specifické pro konfigurace údržby.
Podívejte se na následující kód:
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 }
Parametr SoftwareUpdateConfigurationRunContext obsahuje informace o seznamech počítačů v nasazení aktualizace. Nebude předáno skriptům, když je použijete pro události před údržbou nebo po údržbě při použití webhooku Automation. Můžete se dotazovat na seznam počítačů z Azure Resource Graphu nebo můžete mít seznam počítačů kódovaných ve skriptech.
Ujistěte se, že spravované identity, které používáte ve skriptu, mají udělené správné role a oprávnění ke spouštění nebo zastavování počítačů.
Podívejte se na oprávnění související s dotazy Resource Graph.
Podívejte se na roli Přispěvatele virtuálního počítače.
Podívejte se na datovou část webhooku.
Podívejte se na následující kód:
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 } }
K přizpůsobení můžete použít existující skripty s předchozími úpravami nebo použít následující skripty.
Ukázkové skripty
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
}
}
Přidání webhooků
Přidejte webhooky do předchozích publikovaných runbooků a zkopírujte adresy URL těchto webhooků.
Poznámka:
Po vytvoření webhooku nezapomeňte zkopírovat adresu URL. Adresu URL nemůžete znovu načíst.
Vytvoření odběru událostí
Přihlaste se k webu Azure Portal a přejděte na Správce aktualizace Azure.
V části Spravovat vyberteKonfigurace údržby>.
V podokně Konfigurace údržby vyberte konfiguraci.
V části Nastavení vyberte Události.
Výběrem možnosti +Odběr události vytvořte událost před údržbou nebo po údržbě.
V podokně Vytvořit odběr událostí zadejte v části Podrobnosti odběru událostí odpovídající název. Ponechte schéma jako schéma Event Gridu.
V části Typy událostí v části Filtrovat podle typů událostí vyberte Událost před údržbou nebo Po dokončení údržby.
V části Podrobnosti o koncovém bodu vyberte koncový bod webhooku a pak vyberte Konfigurovat koncový bod.
Zadejte příslušné podrobnosti, například adresu URL webhooku události před údržbou nebo po údržbě, aby se událost aktivovala.
Vyberte Vytvořit.
Související obsah
- Získejte přehled událostí před údržbou a po údržbě v Azure Update Manageru.
- Přečtěte si další informace o vytváření událostí před údržbou a po údržbě.
- Zjistěte , jak spravovat události před údržbou a po údržbě nebo zrušit naplánované spuštění.
- Naučte se vytvářet události před údržbou a po údržbě pomocí Azure Functions.