Bagikan melalui


Tutorial: Membuat peristiwa pra dan posting menggunakan Azure Functions

Berlaku untuk: ✔️ VM Windows VM ✔️ ✔️ Linux Lingkungan ✔️ lokal Azure VM server ✔️ yang didukung Azure Arc.

Tutorial ini menjelaskan cara membuat peristiwa pra dan posting untuk memulai dan menghentikan VM dalam alur kerja patch jadwal menggunakan Azure Functions.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Prasyarat
  • Buat aplikasi fungsi
  • Membuat fungsi
  • Membuat langganan peristiwa

Prasyarat

  1. Pastikan Anda menggunakan runbook PowerShell 7.2 .

  2. Tetapkan izin ke identitas terkelola - Anda dapat menetapkan izin ke identitas terkelola yang sesuai. Runbook dapat menggunakan identitas terkelola yang ditetapkan sistem akun Automation atau identitas terkelola yang ditetapkan pengguna.

    Anda dapat menggunakan cmdlet portal atau PowerShell untuk menetapkan izin ke setiap identitas:

    Ikuti langkah-langkah dalam Menetapkan peran Azure menggunakan portal Azure untuk menetapkan izin


  1. Az.ResourceGraph Impor modul, pastikan modul diperbarui ke ThreadJob dengan modul versi 2.0.3.

Buat aplikasi fungsi

  1. Ikuti langkah-langkah untuk Membuat aplikasi fungsi.

  2. Setelah Anda membuat aplikasi fungsi, Buka sumber daya, pastikan Anda memuat dependensi dengan mengikuti langkah-langkah berikut:

    Catatan

    Anda harus memuat dependensi hanya untuk pertama kalinya. Jika dependensi PowerShell gagal dimuat. Periksa versi terbaru AZ, dan AZ. ResourceGraph.

    1. Pada Aplikasi Fungsi, pilih File aplikasi.

    2. Di bawah host.json, aktifkan ManagedDependecy ke True dan pilih requirements.psd1.

    3. Di bawah requirements.psd1, tempelkan kode berikut:

       @{
       'Az'='12.*' 
       'Az.ResourceGraph'='1.0.0' 
       'Az.Resources'='6.*' 
       'ThreadJob' = '2.*'
       }
      
    4. Pilih Simpan.

  3. Mulai ulang aplikasi fungsi dari tab Gambaran Umum untuk memuat dependensi yang disebutkan dalam file requirements.psd1 .

Membuat fungsi

  1. Setelah Anda membuat aplikasi fungsi, buka Sumber Daya, dan di Gambaran Umum, pilih Buat di portal Azure.

  2. Di jendela Buat fungsi , buat pilihan berikut:

    1. Untuk properti Lingkungan pengembangan, pilih Kembangkan di portal
    2. Di Pilih templat, pilih Event Grid.
    3. Di Detail templat, masukkan nama di Fungsi Baru lalu pilih Buat. Cuplikan layar yang memperlihatkan opsi untuk dipilih saat membuat fungsi.
  3. Di fungsi Event grid, pilih Code+Test dari menu sebelah kiri, tempelkan kode berikut dan pilih Simpan.

    # 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. Pilih Integrasi dari menu sebelah kiri dan edit nama parameter Pemicu Peristiwa di bawah Pemicu. Gunakan nama parameter yang sama yang diberikan di jendela Code+Test . Dalam contoh, parameternya adalah eventGridEvent.

    Cuplikan layar yang memperlihatkan parameter eventGridEvent.

  5. Pilih Simpan

Membuat langganan Peristiwa

  1. Masuk ke portal Azure dan buka Azure Update Manager Anda.
  2. Di bawah Kelola, pilih Mesin, Konfigurasi Pemeliharaan.
  3. Pada halaman Konfigurasi Pemeliharaan, pilih konfigurasi.
  4. Di bawah Pengaturan, pilih Peristiwa.
  5. Pilih +Langganan Peristiwa untuk membuat peristiwa pemeliharaan pra/pasca pemeliharaan.
  6. Pada halaman Buat Langganan Peristiwa, masukkan detail berikut ini:
    1. Di bagian Detail Langganan Peristiwa, berikan nama yang sesuai.
    2. Pertahankan skema sebagai Skema Event Grid.
    3. Di bagian Jenis Peristiwa, Filter ke Jenis Peristiwa.
      1. Pilih Peristiwa Pra-Pemeliharaan untuk pra-peristiwa.
        • Di bagian Detail titik akhir, pilih titik akhir Azure Function dan pilih Konfigurasikan dan Titik Akhir.
        • Berikan detail yang sesuai seperti Grup sumber daya, aplikasi fungsi untuk memicu peristiwa.
      2. Pilih Pasca Pemeliharaan Peristiwa untuk pasca-peristiwa.
        • Di bagian Detail titik akhir, titik akhir Azure Function dan pilih Konfigurasikan dan Titik Akhir.
        • Berikan detail yang sesuai seperti Grup sumber daya, aplikasi Fungsi untuk memicu peristiwa.
  7. Pilih Buat.

Anda juga dapat menggunakan akun Azure Storage dan Event hub untuk menyimpan, mengirim, dan menerima peristiwa. Pelajari selengkapnya tentang cara membuat hub Peristiwa dan antrean Penyimpanan.

Langkah berikutnya