Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: ✔️ Windows rendszerű virtuális gépek ✔️ Linux rendszerű virtuális gépek ✔️ Helyszíni környezet ✔️ Azure-beli virtuális gépek ✔️ Azure Arc-kompatibilis kiszolgálók.
Ez az oktatóanyag bemutatja, hogyan hozhat létre karbantartás előtti és utáni eseményeket egy virtuális gép (VM) ütemezett javítási munkafolyamatban való elindításához és leállításához az Azure Functions használatával.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Függvényalkalmazás létrehozása.
- Hozzon létre egy függvényt.
- Hozzon létre egy esemény-előfizetést.
Előfeltételek
Ellenőrizze, hogy PowerShell 7.4 runbookot használ.
Engedélyek hozzárendelése a megfelelő felügyelt identitáshoz. A runbook használhatja az Automation-fiók által a rendszernek hozzárendelt felügyelt identitást vagy a felhasználó által hozzárendelt felügyelt identitást.
A következő példaszkriptekhez (virtuális gépek indításához és leállításához) virtuálisgép-közreműködői szerepkörre vagy egyéni szerepkörre van szükség az alábbi engedélyekkel:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/action
- Microsoft.Compute/virtualMachines/powerOff/action
Az Azure Portalon vagy az Azure PowerShell-parancsmagokkal engedélyeket rendelhet az egyes identitásokhoz:
Az engedélyek hozzárendeléséhez kövesse az Azure-szerepkörök hozzárendelése az Azure Portal használatával című témakörben leírt lépéseket.
- Importálja a modult
Az.ResourceGraph. Győződjön meg arról, hogy a modul a ThreadJob 2.0.3-s verziójával frissül.
Függvényalkalmazás létrehozása
Függvényalkalmazás létrehozásához kövesse az alábbi lépéseket.
Nyissa meg az erőforrást, és töltse be a függőségeket az alábbi lépésekkel.
Feljegyzés
A függőségeket csak az első alkalommal kell betölteni. Ha a PowerShell-függőségek betöltése sikertelen, ellenőrizze a
AzésAz.ResourceGraphlegújabb verzióját.Függvényalkalmazás esetén válassza az Alkalmazásfájlok lehetőséget.
A host.jsonterületen állítsa a ManagedDependecy értéket True értékre, és válassza ki a requirements.psd1 elemet.
A requirements.psd1 területen illessze be a következő kódot:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Válassza a Mentés lehetőséget.
Indítsa újra a függvényalkalmazást az Áttekintés lapról a requirements.psd1 fájlban említett függőségek betöltéséhez.
Függvény létrehozása
A függvényalkalmazás létrehozása után lépjen az erőforrásra, válassza az Áttekintés lehetőséget, majd válassza a Létrehozás lehetőséget az Azure Portalon.
A Függvény létrehozása panelen végezze el a következő beállításokat:
Az Event grid függvénypanelen válassza a Kód+Tesztelés lehetőséget a bal oldali menüből. Illessze be a következő kódot, majd válassza a Mentés lehetőséget.
# 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 } }A bal oldali menüben válassza az Integráció lehetőséget. Eseményindító esetén adja meg az Eseményindító paraméter névértékét. Használja ugyanazt a paraméternevet, amelyet a Code+Test ablakban megadott. A példában a paraméter a következő
eventGridEvent: .Válassza a Mentés lehetőséget.
Esemény-előfizetés létrehozása
Jelentkezzen be az Azure portálra, és lépjen az Azure frissítéskezelőbe.
A Kezelés területen válassza a Gépek>karbantartási konfigurációja lehetőséget.
A Karbantartási konfiguráció panelen válassza ki a konfigurációt.
A Beállítások területen válassza az Események lehetőséget.
Az +Esemény-előfizetés lehetőséget választva előkarbantartást vagy karbantartás utáni eseményt hozhat létre.
Az Esemény-előfizetés létrehozása panel Esemény-előfizetés részletei szakaszában adjon meg egy megfelelő nevet. Tartsa a sémát Event Grid-sémaként.
Az Eseménytípusok szakaszban a Szűrés eseménytípusok között válassza a Karbantartás előtti esemény vagy a Karbantartás utáni esemény lehetőséget.
A Végpont részletei szakaszban válassza ki az Azure-függvény végpontját, majd válassza a Végpont konfigurálása lehetőséget.
Adja meg a megfelelő részleteket, például az erőforráscsoportot és a függvényalkalmazást az esemény aktiválásához.
Válassza a Létrehozás lehetőséget.
Az Azure Storage-fiókokat és egy eseményközpontot is használhat események tárolására, küldésére és fogadására. További információkért tekintse meg az üzenetsor Azure Storage-beli létrehozásáról és egy eseményközpont azure portalon történő létrehozásáról szóló rövid útmutatókat.
Kapcsolódó tartalom
- Áttekintést kaphat a karbantartás előtti és a karbantartás utáni eseményekről az Azure Update Managerben.
- További információ a karbantartás előtti és a karbantartás utáni események létrehozásáról.
- Megtudhatja, hogyan kezelheti az előkarbantartást és a karbantartás utáni eseményeket, illetve hogyan szakíthat meg ütemezett futtatásokat.
- Megtudhatja , hogyan hozhat létre karbantartás előtti és utáni eseményeket egy webhook használatával Automation-runbookokkal.