Samouczek: tworzenie zdarzeń wstępnych i następujących przy użyciu usługi Azure Functions
Dotyczy: ✔️ Maszyny wirtualne z systemem Windows Maszyny ✔️ wirtualne z systemem Linux ✔️ w środowisku ✔️ lokalnym maszyn wirtualnych platformy Azure maszyn wirtualnych platformy ✔️ Azure z obsługą usługi Azure Arc.
W tym samouczku wyjaśniono, jak utworzyć zdarzenia wstępne i ogłaszane w celu uruchamiania i zatrzymywania maszyny wirtualnej w przepływie pracy poprawek harmonogramu przy użyciu usługi Azure Functions.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Wymagania wstępne
- Tworzenie aplikacji funkcji
- Tworzenie funkcji
- Tworzenie subskrypcji zdarzeń
Wymagania wstępne
Upewnij się, że używasz elementu Runbook programu PowerShell 7.2 .
Przypisywanie uprawnień do tożsamości zarządzanych — możesz przypisać uprawnienia do odpowiedniej tożsamości zarządzanej. Element Runbook może używać przypisanej przez system tożsamości zarządzanej konta usługi Automation lub tożsamości zarządzanej przypisanej przez użytkownika.
Do przypisywania uprawnień do każdej tożsamości można użyć portalu lub poleceń cmdlet programu PowerShell:
Wykonaj kroki opisane w temacie Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal , aby przypisać uprawnienia
- Zaimportuj
Az.ResourceGraph
moduł, upewnij się, że moduł został zaktualizowany do zadania ThreadJob przy użyciu modułu w wersji 2.0.3.
Tworzenie aplikacji funkcji
Wykonaj kroki, aby utworzyć aplikację funkcji.
Po utworzeniu aplikacji funkcji przejdź do zasobu, upewnij się, że załadujesz zależności, wykonując następujące kroki:
Uwaga
Musisz załadować zależności tylko po raz pierwszy. Jeśli nie można załadować zależności programu PowerShell. Sprawdź najnowsze wersje modułu AZ i az. ResourceGraph.
W aplikacji funkcji wybierz pozycję Pliki aplikacji.
W host.json włącz wartość ManagedDependecy na wartość True i wybierz pozycję requirements.psd1.
W obszarze requirements.psd1 wklej następujący kod:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
Wybierz pozycję Zapisz.
Uruchom ponownie aplikację funkcji z karty Przegląd , aby załadować zależności wymienione w pliku requirements.psd1 .
Tworzenie funkcji
Po utworzeniu aplikacji funkcji przejdź do pozycji Zasób, a następnie w obszarze Przegląd wybierz pozycję Utwórz w witrynie Azure Portal.
W oknie Tworzenie funkcji wybierz następujące opcje:
W funkcji Event Grid wybierz pozycję Kod+test z menu po lewej stronie, wklej następujący kod i wybierz pozycję Zapisz.
# Make sure that we are using eventGridEvent for parameter binding in 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 } }
Wybierz pozycję Integracja z menu po lewej stronie i edytuj nazwę parametru Wyzwalacz zdarzenia w obszarze Wyzwalacz. Użyj tej samej nazwy parametru podanej w oknie Kod+test . W tym przykładzie parametr to eventGridEvent.
Wybierz pozycję Zapisz
Tworzenie subskrypcji zdarzeń
- Zaloguj się do witryny Azure Portal i przejdź do usługi Azure Update Manager.
- W obszarze Zarządzanie wybierz pozycję Maszyny, Konfiguracja konserwacji.
- Na stronie Konfiguracja konserwacji wybierz konfigurację.
- W obszarze Ustawienia wybierz pozycję Zdarzenia.
- Wybierz pozycję +Subskrypcja zdarzeń, aby utworzyć zdarzenie przed/po konserwacji.
- Na stronie Tworzenie subskrypcji zdarzeń wprowadź następujące szczegóły:
- W sekcji Szczegóły subskrypcji zdarzeń podaj odpowiednią nazwę.
- Zachowaj schemat jako schemat usługi Event Grid.
- W sekcji Typy zdarzeń filtruj do typów zdarzeń.
- Wybierz pozycję Zdarzenie przed konserwacją dla zdarzenia przed zdarzeniem.
- W sekcji Szczegóły punktu końcowego wybierz punkt końcowy funkcji platformy Azure, a następnie wybierz pozycję Konfiguruj i punkt końcowy.
- Podaj odpowiednie szczegóły, takie jak Grupy zasobów, aplikacja funkcji, aby wyzwolić zdarzenie.
- Wybierz pozycję Po wystąpieniu zdarzenia konserwacji dla zdarzenia po zdarzeniu.
- W sekcji Szczegóły punktu końcowego punkt końcowy funkcji platformy Azure wybierz pozycję Konfiguruj i punkt końcowy.
- Podaj odpowiednie szczegóły, takie jak grupa zasobów, aplikacja funkcji, aby wyzwolić zdarzenie.
- Wybierz pozycję Zdarzenie przed konserwacją dla zdarzenia przed zdarzeniem.
- Wybierz pozycję Utwórz.
Możesz również używać kont usługi Azure Storage i centrum zdarzeń do przechowywania, wysyłania i odbierania zdarzeń. Dowiedz się więcej na temat tworzenia kolejek centrum zdarzeń i magazynu.
Następne kroki
- Dowiedz się więcej na temat przeglądu zdarzeń wstępnych i ogłaszanych w usłudze Azure Update Manager.
- Dowiedz się więcej na temat tworzenia zdarzeń wstępnych i ogłaszanych
- Aby dowiedzieć się, jak zarządzać zdarzeniami wstępnymi i publikować je lub anulować przebieg harmonogramu, zobacz zdarzenia konfiguracji przed konserwacją i po nim.
- Dowiedz się więcej na temat tworzenia zdarzeń wstępnych i publikowania ich przy użyciu elementu webhook z usługą Automation.