Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✔️ Virtuella Windows-datorer ✔️ Virtuella Linux-datorer ✔️ Lokal miljö ✔️ Azure VMs ✔️ Arc-aktiverade servrar.
I den här självstudien beskrivs hur du skapar händelser före underhåll och efter underhåll för att starta och stoppa en virtuell dator (VM) i ett schemalagt korrigeringsarbetsflöde med hjälp av Azure Functions.
I den här handledningen lär du dig hur man:
- Skapa en funktionsapp.
- Skapa en funktion.
- Skapa en händelseprenumeration.
Förutsättningar
Kontrollera att du använder en PowerShell-runbook i version 7.4.
Tilldela behörigheter till lämplig hanterad identitet. Körboken kan använda Automation-kontots systemtilldelade hanterad identitet eller en användartilldelad hanterad identitet.
Följande skriptexempel (starta och stoppa virtuella datorer) kräver rollen Virtuell datordeltagare eller en anpassad roll med dessa specifika behörigheter:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtuellaMaskiner/startaOm/åtgärd
- Microsoft.Compute/virtualMachines/powerOff/action
Du kan använda antingen Azure-portalen eller Azure PowerShell-cmdletar för att tilldela behörigheter till varje identitet:
Om du vill tilldela behörigheter följer du stegen i Tilldela Azure-roller med hjälp av Azure-portalen.
- Importera modulen
Az.ResourceGraph. Kontrollera att modulen har uppdaterats till ThreadJob med modulversion 2.0.3.
Skapa en funktionsapp
Följ stegen för att skapa en funktionsapp.
Gå till resursen och ladda beroendena med hjälp av följande steg.
Kommentar
Du behöver ladda in beroendena bara första gången. Om inläsningen av PowerShell-beroenden misslyckas, kontrollera de senaste versionerna av
AzochAz.ResourceGraph.För Funktionsapp väljer du Appfiler.
Under host.jsonanger du ManagedDependecy till True och väljer requirements.psd1.
Under requirements.psd1 klistrar du in följande kod:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Välj Spara.
Starta om funktionsappen från fliken Översikt för att läsa in de beroenden som nämns i filen requirements.psd1 .
Skapa en funktion
När du har skapat funktionsappen går du till resursen, går till Översikt och väljer sedan Skapa i Azure-portalen.
I fönstret Skapa funktion gör du följande val:
I funktionsfönstret Händelserutnät väljer du Kod+Test på den vänstra menyn. Klistra in följande kod och välj sedan Spara.
# 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 } }Välj Integrering på den vänstra menyn. För Utlösare anger du parameternamnet för händelseutlösaren . Använd samma parameternamn som anges i fönstret Kod+Test . I exemplet är
eventGridEventparametern .Välj Spara.
Skapa en händelseprenumeration
Logga in på Azure-portalen och gå till Azure Uppdateringshanteraren.
Under Hantera väljer du Konfiguration av datorunderhåll>.
Välj konfigurationen i fönstret Underhållskonfiguration .
Under Inställningar väljer du Händelser.
Välj +Händelseprenumeration för att skapa en händelse före underhåll eller efter underhåll.
Ange ett lämpligt namn i avsnittet Information om händelseprenumeration i fönstret Skapa händelseprenumeration. Behåll schemat som Event Grid-schema.
I avsnittet Händelsetyper för Filtrera till händelsetyper väljer du Händelse före underhåll eller Händelse efter underhåll.
I avsnittet Slutpunktsinformation väljer du Slutpunkten för Azure-funktionen och väljer sedan Konfigurera en slutpunkt.
Ange lämplig information, till exempel resursgruppen och funktionsappen för att utlösa händelsen.
Välj Skapa.
Du kan också använda Azure Storage-konton och en händelsehubb för att lagra, skicka och ta emot händelser. Mer information finns i snabbstarterna för att skapa en kö i Azure Storage och skapa en händelsehubb med hjälp av Azure-portalen.
Relaterat innehåll
- Få en översikt över händelser före underhåll och efter underhåll i Azure Update Manager.
- Läs mer om hur du skapar händelser före underhåll och efter underhåll.
- Lär dig hur du hanterar händelser före underhåll och efter underhåll eller att avbryta en schemalagd körning.
- Lär dig hur du skapar före- och efterunderhållshändelser med en webhook med hjälp av Automation-runbooks.