مشاركة عبر


البرنامج التعليمي: إنشاء أحداث ما قبل الحدث ونشره باستخدام Azure Functions

ينطبق على: ✔️ Windows VMs ✔️ Linux VMs ✔️ البيئة ✔️ المحلية خوادم Azure VMs ✔️ Azure Arc الممكنة.

يشرح هذا البرنامج التعليمي كيفية إنشاء أحداث ما قبل النشر لبدء تشغيل جهاز ظاهري وإيقافه في سير عمل تصحيح الجدول باستخدام Azure Functions.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • المتطلبات الأساسية
  • قم بإنشاء تطبيق دالة
  • إنشاء وظيفة
  • إنشاء اشتراك حدث

المتطلبات الأساسية

  1. تأكد من استخدام دفتر تشغيل PowerShell 7.2 .

  2. تعيين إذن للهويات المدارة - يمكنك تعيين أذونات للهوية المدارة المناسبة. يمكن لدفتر التشغيل استخدام إما هوية مُدارة معينة من قبل نظام حساب التنفيذ التلقائي أو هوية مُدارة معينة من قبل المستخدم.

    يمكنك استخدام مدخل أو PowerShell cmdlets لتعيين أذونات لكل هوية:

    اتبع الخطوات الواردة في تعيين أدوار Azure باستخدام مدخل Microsoft Azure لتعيين الأذونات


  1. استيراد الوحدة النمطية Az.ResourceGraph ، تأكد من تحديث الوحدة النمطية إلى ThreadJob مع إصدار الوحدة النمطية 2.0.3.

قم بإنشاء تطبيق دالة

  1. اتبع الخطوات لإنشاء تطبيق دالة.

  2. بعد إنشاء تطبيق الوظائف، انتقل إلى المورد، وتأكد من تحميل التبعيات باتباع الخطوات التالية:

    إشعار

    يجب عليك تحميل التبعيات لأول مرة فقط. إذا فشلت تبعيات PowerShell في التحميل. تحقق من أحدث إصدارات AZ وAZ. ResourceGraph.

    1. في Function App، حدد App files.

    2. ضمن host.json، قم بتمكين ManagedDependecy إلى True وحدد requirements.psd1.

    3. ضمن requirements.psd1، الصق التعليمات البرمجية التالية:

       @{
       'Az'='12.*' 
       'Az.ResourceGraph'='1.0.0' 
       'Az.Resources'='6.*' 
       'ThreadJob' = '2.*'
       }
      
    4. حدد حفظ.

  3. أعد تشغيل تطبيق الدالة من علامة التبويب Overview لتحميل التبعيات المذكورة في ملف requirements.psd1 .

إنشاء وظيفة

  1. بعد إنشاء تطبيق الوظائف، انتقل إلى Resource، وفي Overview، حدد Create in Azure portal.

  2. في نافذة Create function ، قم بإجراء التحديدات التالية:

    1. بالنسبة لخاصية Development environment، حدد Develop in portal
    2. في Select a template، حدد Event Grid.
    3. في تفاصيل القالب، أدخل الاسم في دالة جديدة ثم حدد إنشاء. لقطة شاشة تعرض خيارات التحديد أثناء إنشاء وظيفة.
  3. في دالة شبكة الأحداث، حدد Code+Test من القائمة اليسرى، والصق التعليمات البرمجية التالية وحدد Save.

    # 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. حدد Integration من القائمة اليسرى وقم بتحرير اسم معلمة Event Trigger ضمن Trigger. استخدم نفس اسم المعلمة المحدد في نافذة Code+Test . في المثال، المعلمة هي eventGridEvent.

    لقطة شاشة تعرض المعلمة eventGridEvent.

  5. حدد حفظ

إنشاء اشتراك حدث

  1. سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى Azure Update Manager.
  2. ضمن إدارة، حدد الأجهزة، تكوين الصيانة.
  3. في صفحة تكوين الصيانة، حدد التكوين.
  4. ضمن Settings، حدد Events.
  5. حدد +Event Subscription لإنشاء حدث صيانة قبل/بعد.
  6. في صفحة إنشاء اشتراك حدث، أدخل التفاصيل التالية:
    1. في قسم تفاصيل اشتراك الحدث، أدخل اسما مناسبا.
    2. احتفظ بالمخطط كمخطط شبكة الأحداث.
    3. في قسم أنواع الأحداث، قم بالتصفية إلى أنواع الأحداث.
      1. حدد حدث الصيانة المسبقة لحدث ما قبل الحدث.
        • في قسم Endpoint details ، حدد نقطة نهاية Azure Function وحدد Configure and Endpoint.
        • قم بتوفير التفاصيل المناسبة مثل مجموعات الموارد، تطبيق الوظائف لتشغيل الحدث.
      2. حدد حدث ما بعد الصيانة لحدث ما بعد الحدث.
        • في قسم Endpoint details ، نقطة نهاية Azure Function وحدد Configure and Endpoint.
        • قم بتوفير التفاصيل المناسبة مثل Resource group و Function app لتشغيل الحدث.
  7. حدد إنشاء.

يمكنك أيضا استخدام حسابات Azure Storage ومركز الأحداث لتخزين الأحداث وإرسالها وتلقيها. تعرف على المزيد حول كيفية إنشاء مركز الأحداث وقوائم انتظار التخزين.

الخطوات التالية