Udostępnij za pośrednictwem


Samouczek: tworzenie zdarzeń wstępnych i ogłaszanych (wersja zapoznawcza) 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

  1. Upewnij się, że używasz elementu Runbook programu PowerShell 7.2 .

  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


  1. 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

  1. Wykonaj kroki, aby utworzyć aplikację funkcji.

  2. 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.

    1. W aplikacji funkcji wybierz pozycję Pliki aplikacji.

    2. W host.json włącz wartość ManagedDependecy na wartość True i wybierz pozycję requirements.psd1.

    3. W obszarze requirements.psd1 wklej następujący kod:

       @{
       'Az'='5.*' 
       'Az.ResourceGraph'='0.13.0' 
       'Az.Resources'='6.*' 
       'ThreadJob' = '2.*'
       }
      
    4. Wybierz pozycję Zapisz.

  3. Uruchom ponownie aplikację funkcji z karty Przegląd , aby załadować zależności wymienione w pliku requirements.psd1 .

Tworzenie funkcji

  1. Po utworzeniu aplikacji funkcji przejdź do pozycji Zasób, a następnie w obszarze Przegląd wybierz pozycję Utwórz w witrynie Azure Portal.

  2. W oknie Tworzenie funkcji wybierz następujące opcje:

    1. Dla właściwości Środowisko programistyczne wybierz pozycję Develop in portal (Programowanie w portalu)
    2. W obszarze Wybierz szablon wybierz pozycję Event Grid.
    3. W obszarze Szczegóły szablonu wprowadź nazwę w obszarze Nowa funkcja , a następnie wybierz pozycję Utwórz. Zrzut ekranu przedstawiający opcje do wybrania podczas tworzenia funkcji.
  3. 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
        }
    }
    
  4. 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.

    Zrzut ekranu przedstawiający parametr eventGridEvent.

  5. Wybierz pozycję Zapisz

Tworzenie subskrypcji zdarzeń

  1. Zaloguj się do witryny Azure Portal i przejdź do usługi Azure Update Manager.
  2. W obszarze Zarządzanie wybierz pozycję Maszyny, Konfiguracja konserwacji.
  3. Na stronie Konfiguracja konserwacji wybierz konfigurację.
  4. W obszarze Ustawienia wybierz pozycję Zdarzenia.
  5. Wybierz pozycję +Subskrypcja zdarzeń, aby utworzyć zdarzenie przed/po konserwacji.
  6. Na stronie Tworzenie subskrypcji zdarzeń wprowadź następujące szczegóły:
    1. W sekcji Szczegóły subskrypcji zdarzeń podaj odpowiednią nazwę.
    2. Zachowaj schemat jako schemat usługi Event Grid.
    3. W sekcji Typy zdarzeń filtruj do typów zdarzeń.
      1. 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.
      2. 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.
  7. 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