Sdílet prostřednictvím


Kurz: Vytvoření události před a po nasazení pomocí služby Azure Functions

Platí pro: ✔️ Virtuální ✔️ počítače s Windows s Linuxem ✔️ v místním prostředí ✔️ virtuálních počítačů Azure s ✔️ podporou Azure Arc.

Tento kurz vysvětluje, jak vytvořit události před a po spuštění a zastavení virtuálního počítače v pracovním postupu opravy plánu pomocí Azure Functions.

V tomto kurzu se naučíte:

  • Požadavky
  • Vytvoření aplikace funkcí
  • Vytvoření funkce
  • Vytvoření odběru událostí

Požadavky

  1. Ujistěte se, že používáte runbook PowerShellu 7.2 .

  2. Přiřaďte oprávnění spravovaným identitám – Oprávnění můžete přiřadit příslušné spravované identitě. Runbook může používat spravovanou identitu přiřazenou systémem účtu Automation nebo spravovanou identitu přiřazenou uživatelem.

    K přiřazení oprávnění ke každé identitě můžete použít buď portál, nebo rutiny PowerShellu:

    Přiřaďte oprávnění podle kroků v části Přiřazení rolí Azure pomocí webu Azure Portal .


  1. Importujte Az.ResourceGraph modul, ujistěte se, že se modul aktualizuje na ThreadJob s modulem verze 2.0.3.

Vytvoření aplikace funkcí

  1. Postupujte podle pokynů k vytvoření aplikace funkcí.

  2. Po vytvoření aplikace funkcí přejděte k prostředku a následujícím postupem se ujistěte, že načtete závislosti:

    Poznámka:

    Závislosti musíte načíst jenom poprvé. Pokud se nedaří načíst závislosti PowerShellu. Zkontrolujte nejnovější verze AZ a AZ. ResourceGraph.

    1. V aplikaci funkcí vyberte Soubory aplikace.

    2. V části host.json povolte ManagedDependecy hodnotu True a vyberte požadavky.psd1.

    3. Pod požadavky.psd1 vložte následující kód:

       @{
       'Az'='12.*' 
       'Az.ResourceGraph'='1.0.0' 
       'Az.Resources'='6.*' 
       'ThreadJob' = '2.*'
       }
      
    4. Zvolte Uložit.

  3. Restartujte aplikaci funkcí z karty Přehled a načtěte závislosti uvedené v souboru requirements.psd1 .

Vytvoření funkce

  1. Po vytvoření aplikace funkcí přejděte na Prostředek a v přehledu vyberte Vytvořit na webu Azure Portal.

  2. V okně Vytvořit funkci proveďte následující výběry:

    1. Pro vlastnost Vývojové prostředí vyberte Možnost Vývoj na portálu.
    2. V části Vybrat šablonu vyberte Event Grid.
    3. V podrobnostech šablony zadejte název do nové funkce a pak vyberte Vytvořit. Snímek obrazovky znázorňující možnosti, které se mají vybrat při vytváření funkce
  3. Ve funkci Event Grid vyberte v nabídce vlevo kód+test, vložte následující kód a vyberte Uložit.

    # 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. V nabídce vlevo vyberte Možnost Integrace a v části Aktivační událost upravte název parametru Aktivační událost. Použijte stejný název parametru uvedený v okně Code+Test . V příkladu je parametr eventGridEvent.

    Snímek obrazovky znázorňující eventGridEvent parametru

  5. Zvolte Uložit.

Vytvoření odběru událostí

  1. Přihlaste se k webu Azure Portal a přejděte na Azure Update Manager.
  2. V části Spravovat vyberte Počítače, Konfigurace údržby.
  3. Na stránce Konfigurace údržby vyberte konfiguraci.
  4. V části Nastavení vyberte Události.
  5. Výběrem možnosti +Odběr události vytvořte událost před údržbou nebo po dokončení údržby.
  6. Na stránce Vytvořit odběr události zadejte následující podrobnosti:
    1. V části Podrobnosti odběru událostí zadejte odpovídající název.
    2. Ponechte schéma jako schéma Event Gridu.
    3. V části Typy událostí vyfiltrujte typy událostí.
      1. Vyberte událost před údržbou pro předběžnou událost.
        • V části Podrobnosti o koncovém bodu vyberte koncový bod funkce Azure a vyberte Konfigurovat a Koncový bod.
        • Zadejte odpovídající podrobnosti, jako jsou skupiny prostředků, aplikace funkcí pro aktivaci události.
      2. Vyberte událost po údržbě pro událost po události.
        • V části Podrobnosti o koncovém bodu vyberte koncový bod funkce Azure a vyberte Konfigurovat a Koncový bod.
        • Zadejte odpovídající podrobnosti, jako je skupina prostředků, aplikace funkcí pro aktivaci události.
  7. Vyberte Vytvořit.

K ukládání, odesílání a příjmu událostí můžete použít také účty Azure Storage a centrum událostí. Přečtěte si další informace o tom, jak vytvořit centrum událostí a fronty úložiště.

Další kroky