تشغيل مهام تشغيل السحابة الإلكترونية باستخدام أداة جدولة المهام في السحابة الإلكترونية

1. نظرة عامة

في هذا التمرين العملي، ستنشئ مهمة Cloud Run وتعدّ مهمة Cloud Scheduler. ستنفّذ خدمة "قائمة طعام Cymbal Eats" باستخدام نص التهيئة البرمجي. ستنشئ مهمة Cloud Run تُجري طلبات بيانات من واجهة برمجة التطبيقات إلى خدمة قائمة الطعام في Cymbal Eats. ستنفّذ المهمة باستخدام Google Cloud CLI وتُعدّ جدولاً زمنيًا لها. ستتحقّق من التنفيذ من خلال مراجعة السجلات وإجراء طلبات بيانات من واجهة برمجة التطبيقات إلى "خدمة القائمة" للتأكّد من حذف عناصر القائمة.

ما هي مهام Cloud Run؟

يشغّل Cloud Run job حاوية لا تعالج طلبات الويب، بل تنفّذ مهام تشغيلية أو تعالج البيانات. سيشغّل الحاوية المهمة ويخرج منها عند الانتهاء.

مهمة خدمة التنظيف

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

d74200f0bd14d350.png

ما ستتعلمه

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

  • إنشاء مهام Cloud Run
  • تنفيذ مهام Cloud Run
  • إنشاء مهام Cloud Scheduler
  • التحقّق من تنفيذ المهام

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

  • يفترض هذا التمرين المعملي أنك على دراية ببيئات Cloud Console وShell.
  • من المفيد توفّر خبرة سابقة في Cloud Run وCloud Scheduler، ولكنّها ليست شرطًا.

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

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

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

إعداد البيئة

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

eb0157a992f16fa3.png

من Cloud Shell، نفِّذ الأمر التالي لاستنساخ الرمز البرمجي للتطبيق من مستودع هذا والانتقال إلى الدليل الذي يحتوي على خدمة القائمة:

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

انشر خدمة Menu باستخدام نص التهيئة البرمجي إلى Cloud Run. خدمة القائمة هي خدمة مصغّرة مستندة إلى Java تم إنشاؤها باستخدام إطار عمل Quarkus باستخدام قاعدة بيانات Cloud SQL Postgres كخادم خلفي. خدمة القائمة هي تبعية وقت التشغيل لمهمة Cloud Run التي ستنشئها في الخطوات التالية.

./setup.sh

سيستغرق نشر التطبيق 10 دقائق تقريبًا لإنشاء جميع المكوّنات المطلوبة.

تابِع الخطوات التالية بعد تنفيذ الأمر أعلاه.

3- استكشاف رمز مهمة Cloud Run

افتح علامة تبويب جديدة في Cloud Shell من خلال النقر على رمز علامة الجمع.

45f480cd1b9a995.png

انتقِل إلى الدليل الذي يحتوي على خدمة التنظيف وراجِع الملفات التي تشكّل المهمة:

cd ~/cymbal-eats/cleanup-service

يحتوي برنامج cleanup-service في هذا الدليل على ملف Dockerfile يحدّد صورة الحاوية لمهمة خدمة التنظيف مع التبعيات المطلوبة(httpie وjq).

Dockerfile

FROM ubuntu:latest 
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]

يحتوي نص البرمجة الفعلي للتنظيف، والمدرَج أدناه، على أوامر للحصول على قائمة بعناصر القائمة التي تعذّر تشغيلها وحذفها من خلال إجراء طلبات إلى واجهة برمجة التطبيقات لخدمة "القائمة".

script.sh

echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
  echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
  http GET $MENU_SERVICE_URL/menu/$id
  http DELETE $MENU_SERVICE_URL/menu/$id
done

# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
  echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
  http GET $MENU_SERVICE_URL/menu/$id
  http DELETE $MENU_SERVICE_URL/menu/$id
done

يُرجى ملاحظة ما يلي بشأن النص البرمجي:

  • سيتم ضبط متغيرَي البيئة FAILED_ITEM_AGE وMENU_SERVICE_URL أثناء عملية النشر، وستمرّرهما مهمة Cloud Run.
  • FAILED_ITEM_AGE: عدد الدقائق قبل حذف العنصر الذي تعذّر تحميله
  • MENU_SERVICE_URL - عنوان URL لخدمة قائمة Cymbal Eats

4. إنشاء مهمة Cloud Run

بعد ذلك، ستنشئ صورة حاوية وتنشرها في Artifact Registry.

سيتم استخدام صورة الحاوية هذه لإنشاء مهمة Cloud Run.

فعِّل واجهات برمجة التطبيقات للخدمة:

gcloud services enable \
    run.googleapis.com \
    artifactregistry.googleapis.com \
    cloudscheduler.googleapis.com \
    --quiet

اضبط متغيّرات البيئة:

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)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service

أنشئ مستودع Artifact Registry جديدًا لتخزين صور Docker الخاصة بمهمة التنظيف:

gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION

إنشاء صورة حاوية باستخدام Cloud Build ونقلها إلى Artifact Registry باستخدام أمر واحد:

gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest

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

DURATION: 35S
SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz
IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more)
STATUS: SUCCESS

بعد الانتهاء من النشر، انتقِل إلى Artifact Registry وراجِع الصورة المنشورة:

fb95ae38baa7c543.png

ارجع إلى علامة التبويب الثانية في Cloud Shell. نفِّذ الأمر التالي لوصف خدمة القائمة وحفظ عنوان URL في متغيّر البيئة. سيتم استخدام متغيّر البيئة هذا لإعداد مهمة Cloud Run.

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

أنشئ مهمة Cloud Run لتنظيف عناصر القائمة التي تعذّر عرضها والتي مرّ عليها أكثر من دقيقة واحدة [تم ضبطها بواسطة FAILED_ITEM_AGE].

gcloud beta run jobs create cleanup-service \
  --image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
  --set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
  --set-env-vars FAILED_ITEM_AGE=1 \
  --region $REGION

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

Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1]
OK Creating job... Done.
Done.
Job [cleanup-service] has successfully been created.

انتقِل إلى قسم "المهام" في Cloud Run في وحدة التحكّم وراجِع المهمة التي تم إنشاؤها.

انقر على المهمة واستكشِف علامات التبويب المتاحة: HISTORY وLOGS وCONFIGURATION وYAML.

b12c8e312de3b66.png

تأكَّد من ضبط متغيّرات البيئة من خلال مراجعة قسم الإعدادات (CONFIGURATION) الخاص بالمهمة في وحدة التحكّم:

724c2919d05349c8.png

(اختياري) إذا أردت تغيير المتغيّرات Failed Item Age أو Menu Service URL، يمكنك استخدام أمر التعديل بعد إنشاء مهمة Cloud Run:

gcloud beta run jobs update cleanup-service \
  --image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
  --set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
  --set-env-vars FAILED_ITEM_AGE=1 \
  --region $REGION

للتحقّق من صحة المهمة، نفِّذ مهمة Cloud Run من خلال تشغيل الأمر التالي:

gcloud beta run jobs execute cleanup-service --region=$REGION

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

OK Creating execution... Done.                                   
  OK Provisioning resources...
Done.
Execution [cleanup-service-rlxs4] has successfully started running.

View details about this execution by running:
gcloud beta run jobs executions describe cleanup-service-rlxs4
 

انتقِل إلى علامة التبويب "السجلات" لمراجعة نتائج المهمة. من المفترض أن يظهر لك "عمر العنصر الذي تعذّر تحميله" و"عنوان URL لخدمة القائمة" في السجلات.

518cb00036a2561f.png

5- إعداد جدول زمني لمهمة Cloud Run

‫Cloud Scheduler هي أداة جدولة مهام cron مُدارة بالكامل ومناسبة للمؤسسات. تتيح لك هذه الخدمة جدولة أي مَهمّة تقريبًا، بما في ذلك المَهمّات المُجمَّعة ومَهمّات البيانات الضخمة وعمليات البنية الأساسية السحابية وغير ذلك.

من أفضل ممارسات الأمان عند التعامل مع مهمة Cloud Scheduler تنفيذ كل مهمة باستخدام بيانات اعتماد منفصلة. في هذه الخطوة، أنشئ حساب خدمة لاستخدامه في مهمة مجدول التنظيف.

export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa

gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}

ستحتاج مهمة Cloud Scheduler إلى أذونات لإجراء مكالمات إلى مهام Cloud Run.

امنح حساب الخدمة المستخدَم في مهمة Cloud Scheduler الدور Cloud Run Invoker:

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

بعد ذلك، ستُعدّ جدولاً زمنيًا لتشغيل مهمة خدمة التنظيف.

تتوفّر أنواع متعددة من الأهداف التي تتوافق مع Cloud Scheduler.

  • HTTP
  • Pub/Sub
  • App Engine HTTP

ستنشئ مهمة مجدولة باستخدام نوع هدف HTTP.

لأغراض العرض التوضيحي، ستجدولها لتنفيذها كل 5 دقائق.

gcloud scheduler jobs create http cleanup-schedule \
    --location $REGION \
    --schedule="*/5 * * * *" \
    --uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
    --http-method POST \
    --oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com

راجِع المَعلمة uri المستخدَمة لاستدعاء Cloud Run Job:

  • REGION وPROJECT_ID: منطقة Cloud Run ورقم تعريف المشروع اللذان يتم نشر مهمة خدمة التنظيف فيهما
  • استبدِل cleanup-service باسم مهمة Cloud Run.

انتقِل إلى Cloud Scheduler في وحدة التحكّم لمراجعة مهمة أداة الجدولة التي تم إنشاؤها:

3bc9120df7fc6ed.png

راجِع الخيارات المتاحة ضمن قائمة "الإجراءات".

7945908025dd2f2b.png

6. اختبار مهمة Cloud Run

باستخدام نقاط نهاية "خدمة القائمة"، راجِع عناصر القائمة الحالية وحالتها:

curl ${MENU_SERVICE_URL}/menu | jq

إخراج:

ستظهر لك 3 عناصر قائمة في الحالة Ready.

غيِّر حالة عنصر القائمة رقم 1 إلى Failed:

curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
  -H 'Content-Type: application/json' \
  -d '{"status": "Failed"}' | jq

انتظِر لمدة دقيقة واحدة. يجب أن يمرّ دقيقة واحدة على عنصر القائمة ليتم حذفه، وذلك وفقًا لما تم ضبطه من خلال المَعلمة FAILED_ITEM_AGE.

يمكنك انتظار عملية التنفيذ المجدوَلة التالية أو فرض تنفيذ المهمة من وحدة التحكّم.

هناك طرق متعددة لتشغيل مهمة، سواء من خلال واجهة المستخدم أو من سطر الأوامر.

في هذا المثال، نفِّذ الأمر في Cloud Shell(الخيار 3) لتشغيل المهمة.

  1. من Cloud Scheduler من خلال اختيار "فرض تشغيل مهمة" من قائمة "الإجراءات"

6c8cbeae6165ba4a.png

  1. من مهمة Cloud Run بالنقر على الزر "تنفيذ"

229c22288882b5c3.png

  1. من Cloud Shell عن طريق تنفيذ الأمر التالي:
gcloud beta run jobs execute cleanup-service --region=$REGION

انتقِل إلى قسم JOBS في Cloud Run، وافتح علامة التبويب السجلّات وتأكَّد من حذف عنصر القائمة.

50829ae27b135b2d.png

فلتر السجلات حسب الكلمة الرئيسية "حذف" للعثور على السجلات

d94fb9e444b1c1b8.png

استخدِم نقاط نهاية "خدمة القائمة" للتحقّق من عناصر القائمة الحالية من خلال نقطة نهاية REST.

curl ${MENU_SERVICE_URL}/menu | jq

إخراج:

سيظهر لك عنصران في القائمة بحالة Ready.

7. تهانينا!

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

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

  • كيفية إنشاء مهام Cloud Run
  • كيفية تنفيذ مهام Cloud Run
  • كيفية إنشاء مهام Cloud Scheduler
  • كيفية التحقّق من تنفيذ المهام

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

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

تَنظيم

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

حذف المشروع

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