توجيه أحداث السحابة إلى Webhooks باستخدام Azure Event Grid على Kubernetes

في هذا التشغيل السريع، يمكنك إنشاء موضوع في Event Grid على Kubernetes، وإنشاء اشتراك للموضوع، ثم إرسال نموذج حدث إلى الموضوع لاختبار السيناريو.

هام

تكون Event Grid على Kubernetes مع Azure Arc حالياً في المعاينة العامة. يتم توفير إصدار المعاينة هذا دون اتفاقية مستوى الخدمة، ولا يوصى به لأحمال العمل الخاصة بالإنتاج. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة. لمزيد من المعلومات، راجع ⁧⁩شروط الاستخدام التكميلية لمعاينات Microsoft Azure⁧⁩.

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

  1. توصيل مجموعة Kubernetes الخاصة بك بـ Azure Arc .
  2. تثبيت ملحق شبكة الأحداث على نظام مجموعة Kubernetes. ينشر هذا الملحق "شبكة الأحداث" إلى نظام مجموعة Kubernetes.

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

كملحق موقع Azure، يتيح لك موقع مخصص استخدام نظام مجموعةAzure Arc-enabled Kubernetes كموقع هدف لنشر الموارد مثل مواضيع شبكة الأحداث. يمثل الموقع المخصص مساحة اسم في المجموعة وهو المكان الذي يتم فيه نشر الموضوعات واشتراكات الأحداث. في هذا القسم، يمكنك إنشاء موقع مخصص.

  1. قم بتعريف المتغيرات التالية للاحتفاظ بقيم نظام مجموعة Azure Arc ومجموعة الموارد وأسماء المواقع المخصصة. نسخ هذه العبارات إلى محرر، استبدال القيم، ومن ثم نسخ/لصق إلى نافذة bash.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. احصل على معرّف المورد لنظام مجموعة Azure Arc المتصل. قم بتحديث قيم اسم مجموعة Azure Arc ومعلمات مجموعة الموارد قبل تشغيل الأمر.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. الحصول على معرف مورد ملحق شبكة الأحداث. تفترض هذه الخطوة أن الاسم الذي أعطيته للملحق "شبكة الأحداث" هو eventgrid-ext. تحديث أسماء مجموعة نظام المجموعة والموارد Azure Arc قبل تشغيل الأمر.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. إنشاء موقع مخصص باستخدام القيمتين من الخطوة السابقة. تحديث أسماء مواقع وموارد مجموعة مخصصة قبل تشغيل الأمر.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. الحصول على معرف المورد للموقع المخصص. تحديث اسم الموقع المخصص قبل تشغيل الأمر.

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    لمزيد من المعلومات حول إنشاء مواقع مخصصة، راجع إنشاء مواقع مخصصة وإدارتها على Kubernetes الممكّنة بواسطة Azure Arc.

إنشاء موضوع

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

  1. قم بتعريف متغير ليحمل اسم الموضوع.

    topicname="<TOPIC NAME>"
    
  2. قم بتشغيل الأمر التالي لإنشاء موضوع.

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    لمزيد من المعلومات حول الأمر CLI، راجع az eventgrid topic create.

قم بإنشاء نقطة نهاية للرسالة

قبل إنشاء اشتراك للموضوع المخصص، قم بإنشاء نقطة نهاية لرسالة الحدث. عادةً ما تتخذ نقطة النهاية إجراءات بناءً على بيانات الحدث. لتبسيط هذا التشغيل السريع، يمكنك نشر تطبيق ويب تم إنشاؤه مسبقا يعرض رسائل الحدث. يتضمن الحل المنشور خطة خدمة التطبيقات، وتطبيق الويب الخاص بخدمة التطبيقات، وكود المصدر من GitHub.

  1. حدد نشر على Azure لنشر الحل إلى الاشتراك الخاص بك. في بوابة Azure، توفير قيم للمعلمات.

    Button to deploy the Resource Manager template to Azure.

  2. قد يستغرق النشر بضع دقائق حتى يكتمل. بعد نجاح عملية النشر، اطّلع على تطبيق الويب الخاص بك؛ للتأكد من أنه يعمل. في مستعرض ويب، انتقل إلى: https://<your-site-name>.azurewebsites.net

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

  3. ترى الموقع ولكن لم يتم نشر أي أحداث عليه حتى الآن.

    View new site

إنشاء اشتراك

يمكن للمشتركين التسجيل في الأحداث المنشورة على موضوع ما. لتلقي أي حدث، تحتاج إلى إنشاء اشتراك Event Grid لموضوع مهم. يحدد اشتراك الحدث الوجهة التي يتم إرسال هذه الأحداث إليها. لمعرفة المزيد حول جميع الوجهات أو المعالجات المعتمدة، راجع معالجات الأحداث.

لإنشاء اشتراك حدث مع وجهة WebHook (نقطة نهاية HTTPS)، أدخل اسماً لاشتراك الحدث، وقم بتحديث اسم موقع الويب، وقم بتشغيل الأمر التالي.

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

لمزيد من المعلومات حول الأمر CLI، راجع az eventgrid event-subscription create.

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

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

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. تشغيل الأمر التالي للحصول على المفتاح للموضوع المخصص: بعد نسخ ولصق الأمر قم بتحديث اسم الموضوع واسم مجموعة الموارد قبل تشغيل الأمر. إنه المفتاح الأساسي للموضوع. للحصول على هذا المفتاح من بوابة Azure، قم بالتبديل إلى علامة التبويب مفاتيح الوصول في صفحة موضوع شبكة الأحداث. لتتمكن من نشر حدث على موضوع مخصص، تحتاج إلى مفتاح الوصول.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. قم بتشغيل الأمر Curl التالي لنشر الحدث. حدد عنوان URL ومفتاح نقطة النهاية من الخطوة 1 و2 قبل تشغيل الأمر.

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    إذا كان عنوان URL لنقطة نهاية الموضوع من الخطوة 1 هو عنوان IP خاص، كما هو الحال عندما يكون نوع خدمة وسيط شبكة الأحداث هو ClusterIP، فيمكنك تنفيذ Curl من داخل غلاف آخر في نظام المجموعة للوصول إلى عنوان IP ذلك. على سبيل المثال، يمكنك تنفيذ الخطوات التالية:

    1. قم بإنشاء ملف بيان بالتكوين التالي. قد ترغب في الضبط dnsPolicy وفقا لاحتياجاتك. لمزيد من المعلومات، راجع DNS للخدمات والقرون.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. إنشاء أجهزة.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. التحقق من تشغيل الأجهزة.

          kubectl get pod test-pod
      
    4. بدء جلسة عمل shell من الحاوية

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    عند هذه النقطة، لديك جلسة عمل shell من حاوية قيد التشغيل في نظام المجموعة الذي يمكنك من خلاله تنفيذ أمر Curl الموضح في خطوة سابقة.

    إشعار

    لمعرفة كيفية إرسال أحداث مجموعة النظراء باستخدام لغات البرمجة، راجع العينات التالية:

تحقق في عارض شبكة الأحداث

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

View received event in Event Grid Viewer

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

راجع المقالات التالية: