تشغيل سير العمل باستخدام Eventarc

1. نظرة عامة

في هذا الدرس التطبيقي، ستنشئ مشغّلاً في Eventarc يربط موضوعًا في Pub/Sub بخدمة Workflows. تتيح لك خدمة Eventarc فصل الاتصال بين الخدمات، ما يجعل الحلّ أكثر قابلية للتوسيع ويعتمد على الأحداث. ستنشئ سير عمل يتضمّن خطوات متعددة لتنفيذ عملية تجارية تهدف إلى احتساب نقاط المكافآت للعملاء مقابل الطلب في Cymbal Eats. ستستدعي سير العمل واجهة برمجة تطبيقات خاصة لخدمة Cloud Run من أجل تنفيذ منطق النشاط التجاري. تم ضبط خدمة Cloud Run للسماح فقط بنقل البيانات الداخلي وتتطلّب المصادقة. سينشر سير العمل رسالة في موضوع Pub/Sub لإعلام "خدمة الطلبات" بنقاط المكافآت المحسوبة.

c6d4337a47b55333.png

ما هي خدمة Eventarc؟

تتيح لك خدمة Eventarc إنشاء بنى مستندة إلى الأحداث بدون الحاجة إلى تنفيذ البنية الأساسية أو تخصيصها أو صيانتها. تقدّم Eventarc حلاً موحّدًا لإدارة تدفّق تغييرات الحالة، المعروفة باسم الأحداث، بين الخدمات المصغّرة المنفصلة. عند تشغيلها، توجّه Eventarc هذه الأحداث من خلال اشتراكات Pub/Sub إلى وجهات مختلفة (مثل Workflows أو Cloud Run) مع إدارة عمليات التسليم والأمان والتفويض وإمكانية تتبّع البيانات ومعالجة الأخطاء نيابةً عنك.

موفّرو الأحداث على Google

  • أكثر من 90 مقدّم خدمة Google Cloud يرسل مقدّمو الخدمة هؤلاء الأحداث إما مباشرةً من المصدر (مثل Cloud Storage) أو من خلال إدخالات Cloud Audit Logs.
  • مقدّمو خدمة Pub/Sub ترسل هذه الجهات الأحداث إلى Eventarc باستخدام رسائل Pub/Sub.

موفّرو الخدمات الخارجيون

موفّرو الروابط التابعون لجهات خارجية هم جهات غير تابعة لـ Google تقدّم مصدر Eventarc.

مشغّلات Eventarc

  • أحداث Cloud Pub/Sub يمكن أن يتم تشغيل Eventarc من خلال الرسائل المنشورة في مواضيع Pub/Sub.
  • أحداث Cloud Audit Logs (CAL): توفّر "سجلّات تدقيق Cloud" سجلّات تدقيق "نشاط المشرف" و"الوصول إلى البيانات" لكل مشروع على السحابة الإلكترونية ومجلد ومؤسسة.
  • الأحداث المباشرة: يمكن أن يتم تشغيل Eventarc من خلال أحداث مباشرة مختلفة، مثل تعديل على حزمة Cloud Storage أو تعديل على نموذج "الإعداد عن بُعد عبر Firebase".

وجهات الأحداث

c7ca054200edf1b3.png

ما هي "مهام سير العمل"؟

Workflows هي خدمة مُدارة بالكامل تتيح لك دمج الخدمات الصغيرة والمهام وواجهات برمجة التطبيقات. ‫Workflows هي خدمة بدون خادم وسيتم توسيع نطاقها لتلبية طلبك.

حالات استخدام Workflows:

  • يتم تنفيذ سير العمل المستند إلى الأحداث عند تشغيل عوامل محدّدة. على سبيل المثال، عند إرسال طلب جديد وتريد احتساب نقاط ولاء العملاء. أو عند إلغاء طلب، يمكن نشر الحدث وستعالج جميع الخدمات المهتمة الحدث.
  • تنفّذ سير عمل المهام المجمّعة المهام بشكل منتظم باستخدام Cloud Scheduler. على سبيل المثال، مهمة ليلية للتحقّق من عناصر القائمة التي تعذّر عرضها وحذفها.

تُعدّ Workflows مثالية لسير العمل الذي ينظّم الخدمات. يمكنك أتمتة العمليات التي تتضمّن الانتظار وإعادة المحاولة لمدة تصل إلى عام واحد.

مزايا سير العمل:

  • الإعدادات بدلاً من الرمز: يمكنك تقليل الديون الفنية من خلال نقل المنطق إلى الإعدادات بدلاً من كتابة الرمز.
  • تبسيط البنية الهندسية: تتيح لك "مهام سير العمل ذات الحالة" عرض عمليات دمج الخدمات المعقّدة ومراقبتها بدون تبعيات إضافية.
  • تضمين الموثوقية والتسامح مع الأخطاء: التحكّم في حالات تعذُّر التنفيذ باستخدام منطق إعادة المحاولة التلقائي أو المخصّص ومعالجة الأخطاء حتى في حال تعذُّر عمل الأنظمة الأخرى، مع إمكانية تحديد نقاط التوقف في كل خطوة في Cloud Spanner لمساعدتك في تتبُّع مستوى التقدّم
  • لا يحتاج إلى صيانة: التوسّع حسب الحاجة: لا يلزم تصحيح أي برامج أو صيانتها. يمكنك الدفع فقط عند تشغيل سير العمل، بدون أي تكلفة أثناء الانتظار أو عدم النشاط.

في هذا التمرين العملي، ستضبط سير عمل مستندًا إلى الأحداث.

ما ستتعلمه

في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:

  • ضبط موضوع Pub/Sub وEventarc لتشغيل Workflows
  • ضبط Workflow لاستدعاء خدمة Cloud Run ونشر الرسائل إلى Pub/Sub
  • كيفية طلب البحث عن السجلات المنظَّمة في Workflows في Cloud Logging وباستخدام واجهة سطر الأوامر gcloud

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

  • يفترض هذا التمرين العملي معرفة بيئتَي Cloud Console وCloud Shell.
  • يُفضّل توفّر خبرة سابقة في Cloud Run وCloud Pub/Sub، ولكنّها ليست شرطًا مطلوبًا.

2. الإعداد والمتطلبات

إعداد مشروع على السحابة الإلكترونية

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
  • رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك لمعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

إعداد البيئة

فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

eb0157a992f16fa3.png

استنسِخ المستودع وانتقِل إلى الدليل، ثم انسَخ الأمر أدناه والصِقه في الوحدة الطرفية واضغط على Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

نشر العناصر التابعة المطلوبة من خلال تنفيذ lab-setup.sh

سيتم إنشاء الموارد التالية:

  • مجموعة ومثيل AlloyDB
  • ‫Artifact Registry لتخزين صور الحاويات لخدمتَي Cloud Run Job وCustomer Service
  • موصِّل الوصول إلى شبكة VPC لخدمة Cloud Run وJob للتواصل مع قاعدة بيانات AlloyDB
  • مهمة Cloud Run لإنشاء قاعدة بيانات AlloyDB
  • خدمة العملاء في Cloud Run: خدمة مصغّرة مستندة إلى Java تستخدم إطار عمل Quarkus
./lab-setup.sh

إذا طُلب منك منح الإذن، انقر على "منح الإذن" للمتابعة.

6356559df3eccdda.png

ستستغرق عملية الإعداد حوالي 10 دقائق.

انتظِر إلى أن ينتهي النص البرمجي ويظهر الناتج أدناه قبل تنفيذ خطوات أخرى.

Deploying container to Cloud Run service [customer-service] in project [cymbal-eats-19227-5681] region [us-east1]
OK Deploying new service... Done.                                                   
  OK Creating Revision...
  OK Routing traffic...
Done.
Service [customer-service] revision [customer-service-00001-mid] has been deployed and is serving 100 percent of traffic.
Service URL: https://customer-service-e4p5zon5rq-ue.a.run.app

يمكنك استكشاف القسم التالي ثم العودة لاستئناف العملية من الخطوة التالية.

3- مراجعة سير العمل

المفاهيم الأساسية لسير العمل

يتألف سير العمل من سلسلة من الخطوات الموضّحة باستخدام بنية Workflows( YAML أو JSON).

بعد إنشاء سير عمل، يتم نشره، ما يجعله جاهزًا للتنفيذ.

التنفيذ هو تشغيل واحد للمنطق الوارد في تعريف سير العمل. لا يؤدي سير العمل الذي لم يتم تنفيذه إلى فرض أي رسوم. تكون جميع عمليات تنفيذ سير العمل مستقلة، ويتيح التوسّع السريع للمنتج تنفيذ عدد كبير من العمليات المتزامنة.

عناصر التحكّم في التنفيذ

  • الخطوات: لإنشاء سير عمل، عليك تحديد steps وترتيب التنفيذ المطلوبَين باستخدام بنية "مهام سير العمل". يجب أن تتضمّن كل سير عمل خطوة واحدة على الأقل.
  • الشروط: يمكنك استخدام كتلة switch كآلية اختيار تسمح لقيمة تعبير بالتحكّم في سير تنفيذ سير العمل.
  • التكرارات: يمكنك استخدام حلقة for للتكرار على سلسلة من الأرقام أو من خلال مجموعة من البيانات، مثل قائمة أو خريطة.
  • سير العمل الفرعي: يعمل سير العمل الفرعي بشكل مشابه للروتين أو الوظيفة في لغة البرمجة، ما يتيح لك تضمين خطوة أو مجموعة من الخطوات التي سيكرّرها سير عملك عدة مرات.

تشغيل عمليات التنفيذ

  • يدوي: يمكنك إدارة سير العمل من Google Cloud Console أو من سطر الأوامر باستخدام Google Cloud CLI.
  • آلية: يمكن استخدام "مكتبات برامج Cloud" لواجهة برمجة تطبيقات Workflows أو واجهة REST API لإدارة مهام سير العمل.
  • مجدوَلة: يمكنك استخدام Cloud Scheduler لتشغيل سير عمل وفقًا لجدول زمني معيّن.

وسيطات وقت التشغيل

يمكن الوصول إلى البيانات التي يتم تمريرها في وقت التشغيل عن طريق إضافة حقل params إلى سير العمل الرئيسي (الموضوع في كتلة رئيسية). يقبل الحظر الرئيسي وسيطة واحدة تكون أي نوع بيانات JSON صالح. يسمّي حقل المَعلمات المتغيّر الذي يستخدمه سير العمل لتخزين البيانات التي تُدخلها.

سير العمل لمصادقة خدمة Cloud Run

خدمة العملاء هي نموذج تطبيق مضمّن في هذا المستودع يعمل على Cloud Run وتم إعداده للسماح بالطلبات التي تم التحقّق من صحتها الواردة من الشبكات الداخلية فقط. ستضبط Workflows لإضافة رمز مميّز موقَّع من Google بتنسيق اتصال OpenID(OIDC) إلى الطلب للمصادقة باستخدام خدمة Cloud Run.

راجِع المستندات لمعرفة المزيد عن المصادقة بين الخدمات.

يتم ضبط مصادقة سير العمل ضمن الحظر args باستخدام القسم auth.

rewardsWorkflow.yaml.tmpl

   - create_customer:
        call: http.post
        args:
          url: CUSTOMER_SERVICE_URL/customer
          auth:
            type: OIDC

منطق سير العمل

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

  - calculate_multiplier:
        switch:
          - condition: ${totalAmount < 10}
            steps:
              - set_multiplier1:
                  assign:
                    - multiplier: 2
          - condition: ${totalAmount >= 10 and totalAmount < 25}
            steps:
              - set_multiplier2:
                  assign:
                    - multiplier: 3
          - condition: ${totalAmount >= 25}
            steps:
              - set_multiplier3:
                  assign:
                    - multiplier: 5
    - calculate_rewards:
        assign:
            - rewardPoints: ${customerRecord.rewardPoints * multiplier}

fcd91b2bc5d60347.png

4. ضبط "سير العمل" ونشره

إعداد متغيرات البيئة:

export REGION=us-east1

export CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")

echo $CUSTOMER_SERVICE_URL

استبدِل عنوان URL للخدمة في نموذج سير العمل:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" rewardsWorkflow.yaml.tmpl > rewardsWorkflow.yaml

اضبط الموقع الجغرافي لخدمة Workflows ومتغيّرات بيئة المشروع:

gcloud config set workflows/location ${REGION}

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

أنشئ حساب خدمة مخصّصًا لسير العمل مع الأذونات التالية:

  • استدعاء خدمة Cloud Run
  • واجهات برمجة التطبيقات لتسجيل المكالمات
  • نشر الرسائل إلى موضوع PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-cloudrun-sa

gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/run.invoker"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/logging.logWriter"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.publisher"

نشر سير العمل تم ضبط سير العمل لاستخدام حساب الخدمة الذي تم إنشاؤه في الخطوة السابقة:

export WORKFLOW_NAME=rewardsWorkflow

gcloud workflows deploy ${WORKFLOW_NAME} \
  --source=rewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

راجِع مصدر سير العمل والتفاصيل الأخرى(علامة التبويب "المشغّلات"). في الوقت الحالي، لم يتم إعداد أي مشغّلات لتنفيذ سير العمل هذا. يمكنك إعدادها في الخطوة التالية.

d3527393fb07a9b3.png

5- ضبط مواضيع Pub/Sub ومشغّل Eventarc

بعد ذلك، ستنشئ موضوعَين في Pub/Sub وتضبط مشغّلاً واحدًا في Eventarc.

ستنشر خدمة الطلبات رسائل إلى order-topic تتضمّن معلومات عن الطلبات الجديدة.

سينشر سير العمل رسائل إلى order-points-topic تتضمّن معلومات عن نقاط مكافآت الطلبات وإجمالي المبلغ. تعرض خدمة الطلبات(لم يتم نشرها كجزء من هذا المختبر) نقطة نهاية تستخدمها خدمة "الاشتراك في الإشعارات" في order-points-topic, لتعديل نقاط المكافآت والمبلغ الإجمالي لكل طلب.

إنشاء مواضيع جديدة في Pub/Sub:

export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID

اضبط الموقع الجغرافي لخدمة Eventarc:

gcloud config set eventarc/location ${REGION}

أنشئ حساب خدمة مخصّصًا سيتم استخدامه بواسطة مشغّل Eventarc لتنفيذ سير العمل.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

منح حساب الخدمة إذنًا بتنفيذ سير العمل

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/workflows.invoker"

أنشئ مشغّلاً في Eventarc للاستماع إلى رسائل Pub/Sub وتسليمها إلى Workflows.

gcloud eventarc triggers create new-orders-trigger \
  --destination-workflow=${WORKFLOW_NAME} \
  --destination-workflow-location=${REGION} \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --transport-topic=$TOPIC_ID

مثال على الناتج:

Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done.     
Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow].
WARNING: It may take up to 2 minutes for the new trigger to become active.

راجِع مشغّل Eventarc الذي تم إنشاؤه.

bda445561ad5f4.png

راجِع الاشتراك الذي تم إنشاؤه لعبارة التشغيل.

3fccdda7d5526597.png

راجِع التغييرات على جانب سير العمل. تمت إضافة مشغّل جديد.

23d338abc16eaac8.png

6. سير عمل الاختبار

c6d4337a47b55333.png

لمحاكاة "خدمة الطلبات"، سترسل رسائل إلى موضوع Pub/Sub من Cloud Shell وتتحقّق من سجلّات خدمة العملاء في Cloud Run في Cloud Console.

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

مثال على الناتج:

messageIds:
- '5063709859203105'

راجِع تفاصيل تنفيذ سير العمل والسجلّات.

1e802826c700cc3e.png

aad0eae7a970316.png

7. تسجيل البيانات المنظَّمة لسير العمل

تم ضبط سير العمل لكتابة سجلّات منظَّمة بتنسيق JSON. تتم كتابة السجلّات باستخدام Cloud Logging API والمورد workflows.googleapis.com/Workflow وضمن اسم السجلّ projects/${PROJECT_ID}/logs/Workflows.

راجِع إعدادات تسجيل البيانات أدناه.

    - log_totalAmount:
        call: sys.log
        args:
            json:
              orderNumber: ${order.orderNumber}
              totalAmount: ${totalAmount}
              multiplier: ${multiplier}
              totalRewardPoints: ${rewardPoints}
              orderRewardPoints: ${orderRewardPoints}
            severity: INFO

افتح مستكشف السجلات في وحدة التحكّم ونفِّذ طلب بحث عن الطلبات التي تمت معالجتها والتي يزيد إجمالي مبلغها عن دولارَين أمريكيَّين.

استخدِم طلب البحث أدناه، واستبدِل رقم تعريف المشروع(qwiklabs-gcp-01-1a990bfcadb3) برقم تعريف مشروعك الحالي:

resource.type="workflows.googleapis.com/Workflow" AND 
logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2022-11-01T23:59:59Z" AND 
timestamp <= "2023-11-05T00:00:00Z"

مثال على الناتج:

22d2f4686c58724d.png

افتح Cloud Shell واستخدِم gcloud CLI لقراءة السجلّات باستخدام الأوامر أدناه.

استبدِل رقم تعريف المشروع(qwiklabs-gcp-01-1a990bfcadb3) برقم تعريف مشروعك الحالي.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

مثال على الناتج باستخدام التنسيق table:

35d5fd851ecde60.png

استبدِل رقم تعريف المشروع(qwiklabs-gcp-01-1a990bfcadb3) برقم تعريف مشروعك الحالي.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format=json | jq

مثال على الناتج باستخدام التنسيق json:

ac7421548ea9a9f2.png

8. مراجعة سجلّات العملاء

(خطوات اختيارية) تمّ ضبط customer-service حاليًا لقبول الزيارات من الشبكات الداخلية فقط.

نفِّذ الأوامر أدناه لحفظ عنوان URL للخدمة والاتصال بخدمة العملاء.

export REGION=us-east1
CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer

ستتلقّى رسالة خطأ تفيد بأنّ الوصول محظور.

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Forbidden</h1>
<h2>Access is forbidden.</h2>
<h2></h2>
</body></html>

لعرض سجلّات العملاء الحالية، غيِّر إعدادات customer-service ingress في Cloud Run إلى الخيار "Allow all traffic" وانقر على "حفظ".

سيؤدي ذلك إلى إتاحة نقطة النهاية للجميع، ويمكنك طلب Customer Service API من Cloud Shell باستخدام curl.

9156e0eb0a19bc68.png

نفِّذ الأوامر أدناه لحفظ عنوان URL للخدمة وإدراج العملاء الحاليين.

CUSTOMER_SERVICE_URL=$(gcloud run services describe customer-service \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".status.url")

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

مثال على الناتج:

[
  {
    "id": "id1",
    "rewardPoints": 3,
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2022-11-11T15:56:45.487566",
    "email": "ajensen9090+eats@gmail.com",
    "name": "Angela Jensen",
    "state": "CA",
    "updateDateTime": "2022-11-11T15:56:45.866125",
    "zip": "94043"
  }
]

نفِّذ الأمر لنشر طلب جديد عدة مرات وتحقّق من نقاط مكافآت العميل باستخدام أمر curl.

نشر رسالة طلب جديد:

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

تحقَّق من نقاط مكافآت العميل:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $CUSTOMER_SERVICE_URL/customer | jq

التحقّق من السجلّات استبدِل رقم تعريف المشروع(qwiklabs-gcp-01-1a990bfcadb3) برقم تعريف مشروعك الحالي.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND logName=projects/qwiklabs-gcp-01-1a990bfcadb3/logs/Workflows AND jsonPayload.totalAmount > 2 AND timestamp >= "2022-11-01T23:59:59Z" AND timestamp <= "2023-11-05T00:00:00Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

9- تهانينا!

تهانينا، لقد أكملت درس البرمجة.

المواضيع التي تناولناها:

  • كيفية ضبط مهام سير العمل
  • كيفية ضبط مشغّل Eventarc لخدمة "سير العمل"
  • كيفية استدعاء خدمة Cloud Run من Workflows
  • كيفية طلب البحث عن سجلّات منظَّمة في Cloud Logging واستخدام gcloud CLI

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

استكشِف دروسًا تطبيقية أخرى حول Cymbal Eats:

تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.

حذف المشروع

أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.