البدء السريع: توجيه الأحداث المخصصة إلى Azure Function باستخدام Event Grid

Azure Event Grid هي خدمة أحداث للسحابة. Azure Functions هي واحدة من معالجات الأحداث المدعومة. في هذه المقالة، يمكنك استخدام مدخل Microsoft Azure لإنشاء موضوع مخصص، والاشتراك في الموضوع فيه، وتشغيل الحدث لعرض النتيجة. إرسال الأحداث إلى Azure Function.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

إنشاء تطبيق وظائف Azure

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. في قائمة التنقل اليسرى، حدد All services.

  3. حدد حساب في قائمة الفئات.

  4. مرر الماوس فوق Function App (وليس تحديده)، وحدد +.

    لقطة شاشة تعرض تحديد إنشاء ارتباط لتطبيق الوظائف.

  5. في صفحة الأساسيات في معالج إنشاء تطبيق الوظائف، اتبع الخطوات التالية:

    1. حدد اشتراك Azure الذي تريد إنشاء تطبيق الوظائف فيه.

    2. إنشاء مجموعة موارد جديدة أو تحديد مجموعة موارد موجودة.

    3. حدد اسما لتطبيق الوظائف.

    4. حدد .NET لمكدس وقت التشغيل.

    5. بالنسبة للإصدار، حدد 6 (LTS)، النموذج قيد المعالجة.

    6. حدد المنطقة الأقرب إليك.

    7. حدد Next: Storage في أسفل الصفحة.

      لقطة شاشة تعرض علامة التبويب Basics في صفحة Create Function App.

  6. في صفحة التخزين ، قم بإنشاء حساب تخزين جديد أو حدد حساب تخزين موجود ليتم إقرانه بتطبيق الوظائف، ثم حدد Review + create في أسفل الصفحة.

    لقطة شاشة تعرض علامة تبويب التخزين في صفحة إنشاء تطبيق الوظائف.

  7. في صفحة Review + create ، راجع الإعدادات، وحدد Create في أسفل الصفحة لإنشاء تطبيق الوظائف.

  8. بمجرد نجاح النشر، حدد Go to resource للانتقال إلى الصفحة الرئيسية لتطبيق الوظائف.

إنشاء وظيفة

قبل الاشتراك في الموضوع المخصص، قم بإنشاء دالة لمعالجة الأحداث.

  1. في صفحة Function App ، في قسم Create in Azure portal ، حدد Create function link في الجزء الأيمن.

    لقطة شاشة تعرض تحديد ارتباط إنشاء دالة.

  2. في الصفحة Create Function، اتبع الخطوات التالية:

    1. في قسم تحديد قالب، في مربع التصفية أو البحث، اكتب مشغل Azure Event Grid.

    2. حدد قالب Azure Event Grid Trigger في قائمة القوالب.

    3. حدد التالي في أسفل الصفحة.

      لقطة شاشة تعرض مشغل شبكة الأحداث المحدد.

    4. في صفحة تفاصيل القالب، أدخل اسما للدالة. في هذا المثال، يكون HandleEventsFunc.

    5. حدد إنشاء.

      لقطة شاشة تعرض صفحة تفاصيل القالب.

  3. في صفحة Function ل HandleEventsFunc، حدد Code + Test في قائمة التنقل اليسرى، واستبدل التعليمات البرمجية بالتعليمات البرمجية التالية، ثم حدد Save على شريط الأوامر.

    #r "Azure.Messaging.EventGrid"
    #r "System.Memory.Data"
    
    using Azure.Messaging.EventGrid;
    using System;
    
    public static void Run(EventGridEvent eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.Data.ToString());
    }        
    

    صورة تعرض قائمة التحديد Code + Test لدالة Azure.

  4. حدد Monitor في القائمة اليسرى، ثم قم بالتبديل إلى علامة التبويب Logs . احتفظ بهذه النافذة أو علامة تبويب المستعرض مفتوحة حتى تتمكن من رؤية معلومات الحدث المستلمة.

    لقطة شاشة تعرض طريقة عرض Monitor لدالة Azure.

إنشاء موضوع مخصص

يوفر موضوع Event Grid نقطة نهاية معرّفة من قِبل المستخدم تقوم بنشر الأحداث إليها.

  1. في علامة تبويب جديدة من نافذة مستعرض الويب، سجل الدخول إلى مدخل Microsoft Azure.

  2. في شريط البحث في الموضوع، ابحث عن Event Grid Topics، وحدد Event Grid Topics.

    صورة تعرض تحديد مواضيع Event Grid.

  3. في صفحة Event Grid Topics ، حدد + Create على شريط الأوامر.

    لقطة شاشة تعرض الزر Create لإنشاء موضوع Event Grid.

  4. في الصفحة إنشاء موضوع اتبع الخطوات التالية:

    1. حدد اشتراك Azure الخاص بك.

    2. حدد نفس مجموعة الموارد من الخطوات السابقة.

    3. توفير اسم فريد للموضوع المخصص. يجب أن يكون اسم الموضوع فريدًا؛ لأنه ممثل بإدخال DNS. لا تستخدم الاسم الموضح في الصورة. بدلاً من ذلك، قم بإنشاء اسمك الخاص، على أن يكون بين 3 إلى 50 حرفًا، وأن يحتوي فقط على القيم a-z و A-Z و0-9 و "-".

    4. حدد موقعا لموضوع Event Grid.

    5. حدد "Review + create".

      لقطة شاشة تعرض صفحة إنشاء موضوع.

    6. في الصفحة Review + create، راجع الإعدادات ثم حدد Create.

  5. بعد إنشاء الموضوع المخصص، حدد Go to resource link لمشاهدة صفحة موضوع Event Grid التالية للموضوع الذي قمت بإنشائه.

    صورة تعرض الصفحة الرئيسية لموضوع Event Grid المخصص خاصتك.

الاشتراك في موضوع مخصص

يمكنك الاشتراك في موضوع Event Grid لإخبار Event Grid بالأحداث التي تريد تعقبها، ومكان إرسال الأحداث.

  1. الآن، على صفحة موضوع شبكة الأحداث لموضوعك المخصص، حدد + اشتراك حدث من شريط الأدوات.

    صورة تعرض تحديد Add Event Subscription على شريط الأدوات.

  2. في صفحة إنشاء اشتراك حدث، اتبع الخطوات التالية:

    1. أدخل اسماً للاشتراك في الحدث.

    2. حدد Azure Function لنوع نقطة النهاية.

    3. اختر تكوين نقطة نهاية.

      صورة تعرض قيم الاشتراك في الحدث.

    4. بالنسبة لنقطة نهاية الدالة، حدد اشتراك Azure Subscription، ومجموعة الموارد التي يوجد بها تطبيق الدالة Function App، ثم حدد Function App، والدالة التي قمت بإنشائها مسبقًا. حدد Confirm Selection.

      صورة تعرض صفحة Select Azure Function التي تعرض تحديد الدالة التي أنشأتها سابقاً.

    5. هذه الخطوة اختيارية؛ لكنها موصى بها لسيناريوهات الإنتاج. في صفحة إنشاء اشتراك حدث، قم بالتبديل إلى علامة التبويب الميزات المتقدمة، وقم بتعيين قيم الحد الأقصى للأحداث لكل دفعة وحجم الدفعة المفضل بالكيلو بايت.

      يمكن أن تمنحك الدفعات معدل نقل عالٍ. بالنسبة إلى الحد الأقصى للأحداث لكل دفعة، قم بتعيين الحد الأقصى لعدد الأحداث التي سيتضمنها الاشتراك في دفعة. يعيّن حجم الدفعة المفضل الحد الأعلى المفضل لحجم الدُفعة بالكيلو بايت؛ ولكن يمكن تجاوزه إذا كان حدث واحد أكبر من هذا الحد.

      صورة تعرض إعدادات إرسال في دفعات لاشتراك حدث.

    6. في صفحة Create Event Subscription ، حدد Create.

إرسال حدث إلى الموضوع

الآن، لنبادر بتشغيل حدث لمعرفة كيف توزع Event Grid الرسالة إلى نقطة النهاية لديك. استخدم إما Azure CLI أو PowerShell لإرسال حدث اختبار إلى الموضوع المخصص. بشكل عام، يُرسل التطبيق أو خدمة Azure بيانات الحدث.

يستخدم المثال الأول Azure CLI. إنه يحصل على عنوان URL والمفتاح للموضوع المخصص، ونماذج بيانات الحدث. استخدم اسم الموضوع المخصص لـ<topic name>. يُنشئ نموذج بيانات الحدث. يكون عنصر data JSON هو حمولة الحدث. يمكن لأي JSON تم تشكيله بشكل جيد أن يذهب في هذا المجال. يمكنك أيضًا استخدام حقل الموضوع للتوجيه والتصفية المتقدمين. CURL هي أداة مساعدة ترسل طلبات HTTP.

Azure CLI

  1. حدد في مدخل Azure Cloud Shell. حدد Bash في الزاوية العلوية اليسرى من نافذة Cloud Shell.

    صورة تظهر نافذة Cloud Shell - Bash

  2. topicname تعيين المتغيرات و resourcegroupname التي سيتم استخدامها في الأوامر.

    استبدل TOPICNAME باسم موضوع Event Grid.

    topicname="TOPICNAME"
    

    استبدل RESOURCEGROUPNAME باسم مجموعة موارد Azure التي تحتوي على موضوع Event Grid.

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. تشغيل الأمر التالي للحصول على نقطة النهاية للموضوع: بعد نسخ الأمر ولصقه، قم بتحديث اسم الموضوع واسم مجموعة الموارد قبل تشغيل الأمر.

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. تشغيل الأمر التالي للحصول على المفتاح للموضوع المخصص: بعد نسخ ولصق الأمر قم بتحديث اسم الموضوع واسم مجموعة الموارد قبل تشغيل الأمر.

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. انسخ العبارة التالية مع تعريف الحدث، واضغط على ENTER.

    event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
    
  6. قم بتشغيل الأمر Curl التالي لنشر الحدث:

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    

Azure PowerShell

يستخدم المثال الثاني PowerShell لتنفيذ خطوات مماثلة.

  1. حدد في مدخل Microsoft Azure Cloud Shell (بدلاً من ذلك انتقل إلى https://shell.azure.com/). حدد PowerShell في الزاوية العلوية اليمنى من نافذة Cloud Shell. راجع نموذج صورة نافذة Cloud Shell في قسم Azure CLI.

  2. اضبط المتغيرات التالية. بعد نسخ ولصق كل أمر، تحديث اسم الموضوعواسم مجموعة الموارد قبل إجراء الأمر:

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. أجرِ الأوامر التالية للحصول على نقطة النهايةوالمفاتيح للموضوع:

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  4. قم بإعداد الحدث. نسخ وتشغيل العبارات في نافذة Shell.

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. استخدم Invoke-WebRequest لإرسال الحدث.

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

تحقق من تلقي هذه الدالة للحدث

لقد قمت بتشغيل الحدث، وأرسلت شبكة الأحداث الرسالة إلى نقطة النهاية التي قمت بتهيئتها عند الاشتراك.

  1. في صفحة Monitor لدالة Azure، سترى استدعاء.

    لقطة شاشة تعرض علامة التبويب

  2. حدد استدعاء للاطلاع على التفاصيل.

    لقطة شاشة تعرض تفاصيل استدعاء.

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

    صورة تعرض عرض Monitor لدالة Azure مع سجل.

تنظيف الموارد

إذا كنت تخطط لمتابعة العمل مع هذا الحدث، فلا تنظف الموارد التي جرى إنشاؤها في هذه المقالة. وإلا، فاحذف الموارد التي أنشأتها في هذه المقالة.

  1. من القائمة اليُسرى، حدد مجموعات الموارد . إذا لم تر الخيار في القائمة اليسرى، حدد جميع الخدمات في القائمة اليسرى، وحدد مجموعات الموارد .

  2. حدد مجموعة الموارد لفتح صفحة مجموعة الموارد .

  3. حدد حذف مجموعة الموارد من شريط الأدوات.

  4. قم بتأكيد الحذف بإدخال اسم مجموعة الموارد، وحدد حذف .

    مجموعات الموارد

    تم إنشاء مجموعة الموارد الأخرى التي تراها في الصورة، واستخدامها بواسطة نافذة Cloud Shell. احذفها إذا لم تكن تخطط لاستخدام نافذة Cloud Shell لاحقًا.

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

الآن بعد أن عرفت كيفية إنشاء مواضيع مخصصة واشتراكات الأحداث، تعرف على المزيد حول ما يمكن أن تساعدك شبكة الأحداث على القيام به:

اطلع على النماذج التالية للتعرف على كيفية نشر الأحداث واستهلاكها من Event Grid باستخدام لغات برمجة مختلفة.