Aracılığıyla paylaş


Öğretici: Azure İşlevleri kullanarak önceki ve sonraki olayları oluşturma

Şunlar için geçerlidir: ✔️ Windows VM'leri ✔️ Linux VM'leri ✔️ Şirket içi ortam ✔️ Azure VM'leri ✔️ Azure Arc özellikli sunucular.

Bu öğreticide, Azure İşlevleri kullanarak bir vm'yi bir zamanlama düzeltme eki iş akışında başlatmak ve durdurmak için olayları önceden oluşturma ve gönderme açıklanmaktadır.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Önkoşullar
  • İşlev uygulaması oluşturma
  • İşlev oluşturma
  • Olay aboneliği oluşturma

Önkoşullar

  1. PowerShell 7.2 runbook kullandığınızdan emin olun.

  2. Yönetilen kimliklere izin atama - İzinleri uygun yönetilen kimliğe atayabilirsiniz. Runbook, Otomasyon hesabı sistem tarafından atanan yönetilen kimliği veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir.

    Her kimliğe izin atamak için portal veya PowerShell cmdlet'lerini kullanabilirsiniz:

    İzinleri atamak için Azure portalını kullanarak Azure rolleri atama başlığındaki adımları izleyin


  1. Modülü içeri aktarın Az.ResourceGraph , modülün 2.0.3 modülü sürümüyle ThreadJob'a güncelleştirildiğinden emin olun.

İşlev uygulaması oluşturma

  1. İşlev uygulaması oluşturma adımlarını izleyin.

  2. İşlev uygulamasını oluşturduktan sonra Kaynağa git, aşağıdaki adımları izleyerek bağımlılıkları yüklediğinizden emin olun:

    Not

    Bağımlılıkları yalnızca ilk kez yüklemeniz gerekir.

    1. İşlev Uygulamasında Uygulama dosyaları'nı seçin.

    2. host.json altında ManagedDependecy değerini True olarak etkinleştirin ve requirements.psd1 dosyasını seçin.

    3. requirements.psd1 dosyasının altına aşağıdaki kodu yapıştırın:

       @{
       'Az'='5.*' 
       'Az.ResourceGraph'='0.13.0' 
       'Az.Resources'='6.*' 
       'ThreadJob' = '2.*'
       }
      
    4. Kaydet'i seçin.

  3. requirements.psd1 dosyasında belirtilen bağımlılıkları yüklemek için Genel Bakış sekmesinden işlev uygulamasını yeniden başlatın.

İşlev oluşturma

  1. İşlev uygulamasını oluşturduktan sonra Kaynak'a gidin ve Genel Bakış'ta Azure portalında oluştur'u seçin.

  2. İşlev oluştur penceresinde aşağıdaki seçimleri yapın:

    1. Geliştirme ortamı özelliği için Portalda geliştir'i seçin
    2. Şablon seçin bölümünde Event Grid'i seçin.
    3. Şablon ayrıntıları'nda, Adı Yeni İşlev'e girin ve Oluştur'u seçin. İşlev oluştururken seçecek seçenekleri gösteren ekran görüntüsü.
  3. Event grid işlevinde soldaki menüden Code+Test'i seçin, aşağıdaki kodu yapıştırın ve Kaydet'i seçin.

    # 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. Sol menüden Tümleştirme'yi seçin ve Tetikleyici altında Olay Tetikleyicisi parametre adını düzenleyin. Code+Test penceresinde verilen parametre adını kullanın. Örnekte parametresi eventGridEvent'tir.

    eventGridEvent parametresini gösteren ekran görüntüsü.

  5. Kaydet'i seçin.

Olay aboneliği oluşturma

  1. Azure portalında oturum açın ve Azure Update Manager'ınıza gidin.
  2. Yönet'in altında Makineler, Bakım Yapılandırması'yı seçin.
  3. Bakım Yapılandırması sayfasında yapılandırmayı seçin.
  4. Ayarlar'ın altında Olaylar'ı seçin.
  5. Bakım öncesi/sonrası olayı oluşturmak için +Olay Aboneliği'ne tıklayın.
  6. Olay Aboneliği Oluştur sayfasında aşağıdaki ayrıntıları girin:
    1. Olay Aboneliği Ayrıntıları bölümünde uygun bir ad girin.
    2. Şemayı Event Grid Şeması olarak tutun.
    3. Olay Türleri bölümünde, Olay Türlerine Filtre Uygula'yı seçin.
      1. Bir ön olay için Bakım Öncesi Olay'ı seçin.
        • Uç nokta ayrıntıları bölümünde Azure İşlevi uç noktasını ve ardından Yapılandır ve Uç Nokta'yı seçin.
        • Olayı tetikleyen Kaynak grupları, işlev uygulaması gibi uygun ayrıntıları sağlayın.
      2. Olay sonrası için Bakım Sonrası Olay'ı seçin.
        • Uç nokta ayrıntıları bölümünde Azure İşlevi uç noktası ve Yapılandır ve Uç Nokta'yı seçin.
        • Olayı tetikleyen Kaynak grubu, İşlev uygulaması gibi uygun ayrıntıları sağlayın.
  7. Oluştur'u belirleyin.

Olayları depolamak, göndermek ve almak için Azure Depolama hesaplarını ve Olay hub'larını da kullanabilirsiniz. Olay hub'ı ve Depolama kuyrukları oluşturma hakkında daha fazla bilgi edinin.

Sonraki adımlar