تشغيل Cloud Run باستخدام أحداث Eventarc

1. مقدمة

894762ebb681671c.png

تتيح لك خدمة Cloud Run تشغيل حاويات لا يتم تسجيل بياناتها في بيئة مُدارة بالكامل. وهي تستند إلى Knative المفتوحة المصدر، ما يتيح لك اختيار تشغيل الحاويات إما بشكل مُدار بالكامل باستخدام Cloud Run، أو في مجموعة Google Kubernetes Engine باستخدام Cloud Run for Anthos.

cb762f29e9183a3f.png

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

في هذا الدرس التطبيقي العملي، ستتعرّف على Eventarc. على وجه التحديد، ستستمع إلى الأحداث من Pub/Sub وCloud Storage وCloud Audit Logs باستخدام Eventarc، ثم ستمرّرها إلى إحدى خدمات Cloud Run.

أهداف الدورة التعليمية

  • رؤية Eventarc
  • اكتشاف الأحداث في Eventarc
  • إنشاء مخزَن Cloud Run
  • إنشاء مشغّل لخدمة Pub/Sub
  • إنشاء مشغّل لخدمة Cloud Storage
  • إنشاء مشغّل لخدمة Cloud Audit Logs
  • استكشاف واجهة مستخدم Eventarc

2. رؤية Eventarc

تهدف خدمة Eventarc إلى تقديم الأحداث من مصادر أحداث مختلفة تابعة لجهات خارجية وGoogle وGoogle Cloud إلى وجهات أحداث Google Cloud.

59b147dc030b2b0b.png

مصادر Google Cloud

مصادر الأحداث التي هي منتجات تملكها Google Cloud

مصادر Google

مصادر الأحداث التي هي منتجات تملكها Google، مثل Gmail وHangouts وAndroid Management وغيرها

المصادر المخصّصة

مصادر الأحداث التي لا تملكها Google والتي ينشئها المستخدمون النهائيون بأنفسهم

المصادر التابعة لجهات خارجية

مصادر الأحداث التي لا تملكها Google ولا ينتجها العملاء ويشمل ذلك مصادر الأحداث الشائعة، مثل Check Point CloudGuard وDatadog وForgeRock وLacework وما إلى ذلك، والتي يملكها ويديرها مقدّمو الخدمات والشركاء التابعون لجهات خارجية.

يتم تعديل الأحداث لتتوافق مع تنسيق CloudEvents v1.0 من أجل إمكانية التشغيل التفاعلي بين الخدمات. ‫CloudEvents هي مواصفات مفتوحة لا تعتمد على أي بائع وتصف بيانات الأحداث بتنسيقات شائعة، ما يتيح إمكانية التشغيل التفاعلي بين الخدمات والمنصات والأنظمة.

3- الإعداد والمتطلبات

إعداد البيئة بالسرعة التي تناسبك

  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

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

55efc1aaa7a4d3ad.png

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

7ffe5cbb04455448.png

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

قبل البدء

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. نشر خدمة Cloud Run

يمكنك نشر خدمة Cloud Run لتلقّي الأحداث. ستنفّذ حاوية Hello في Cloud Run التي تسجّل محتوى CloudEvents.

أولاً، فعِّل الخدمات المطلوبة لـ Cloud Run:

gcloud services enable run.googleapis.com

انشر حاوية hello على Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

عند النجاح، يعرض سطر الأوامر عنوان URL للخدمة. يمكنك فتح عنوان URL الخاص بالخدمة في أي نافذة متصفّح للتأكّد من أنّ الخدمة قد تم نشرها الآن.

5- اكتشاف الأحداث

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

للاطّلاع على قائمة بأنواع الأحداث المختلفة:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

للحصول على مزيد من المعلومات حول كل نوع من أنواع الأحداث، اتّبِع الخطوات التالية:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

للاطّلاع على قائمة بالخدمات التي تصدر نوعًا معيّنًا من الأحداث:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

للاطّلاع على قائمة بأسماء الطرق (الأحداث الفرعية) التي يمكن لكل خدمة إصدارها، اتّبِع الخطوات التالية:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. إنشاء مشغّل Pub/Sub

إحدى طرق تلقّي الأحداث هي من خلال Cloud Pub/Sub. يمكن لأي تطبيق نشر رسائل إلى Pub/Sub، ويمكن تسليم هذه الرسائل إلى Cloud Run من خلال Eventarc.

الإعداد

قبل إنشاء أي مشغّلات، فعِّل الخدمات المطلوبة لـ Eventarc:

gcloud services enable eventarc.googleapis.com

تحتاج أيضًا إلى حساب خدمة تستخدمه المشغّلات. أنشئ حساب خدمة:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

إنشاء

أنشئ مشغّلاً لفلترة الأحداث المنشورة في موضوع Pub/Sub إلى خدمة Cloud Run التي تم نشرها:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

اختبار

ينشئ مشغّل Pub/Sub موضوعًا في الخلفية. لنكتشف ذلك ونعيّنه إلى متغيّر:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

استخدِم gcloud لنشر رسالة في الموضوع:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

تسجّل خدمة Cloud Run نص الرسالة الواردة. يمكنك الاطّلاع على ذلك في قسم "السجلّات" في مثيل Cloud Run:

69e0177e04a0d1af.png

إنشاء موضوع حالي على Pub/Sub

عند إنشاء مشغّل Pub/Sub، تنشئ خدمة Eventarc تلقائيًا موضوعًا في الخلفية لتستخدمه كموضوع نقل بين تطبيقك وخدمة Cloud Run. يفيد ذلك في إنشاء مشغّل يستند إلى Pub/Sub بسهولة وسرعة، ولكن قد تحتاج أحيانًا إلى استخدام موضوع حالي. تتيح لك خدمة Eventarc تحديد موضوع Pub/Sub حالي في المشروع نفسه باستخدام العلامة --transport-topic gcloud.

لمعرفة طريقة عمل ذلك، أنشئ موضوعًا على Pub/Sub لاستخدامه كموضوع نقل:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

إنشاء مشغّل:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

يمكنك اختبار المشغّل عن طريق إرسال رسالة إلى الموضوع:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. إنشاء مشغّل Cloud Storage

في هذه الخطوة، ستنشئ مشغِّلاً للاستماع إلى الأحداث من Cloud Storage.

الإعداد

أولاً، أنشِئ حزمة لتلقّي الأحداث منها:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

امنح دور eventarc.eventReceiver، حتى يمكن استخدام حساب الخدمة في مشغّل Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

عليك أيضًا إضافة دور pubsub.publisher إلى حساب خدمة Cloud Storage لتفعيل مشغّلات Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

إنشاء

أنشئ مشغّلاً لتوجيه أحداث إنشاء الملفات الجديدة من الحزمة إلى خدمتك:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

اختبار

أدرِج جميع المشغّلات للتأكّد من أنّه تم إنشاء المشغّل بنجاح:

gcloud eventarc triggers list

حمِّل ملفًا إلى حزمة Cloud Storage باتّباع الخطوات التالية:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

إذا تحقّقت من سجلّات خدمة Cloud Run في Cloud Console، من المفترض أن يظهر لك الحدث الذي تم تلقّيه:

904cfc93bb8e8df1.png

8. إنشاء مشغّل Cloud Audit Logs

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

الإعداد

لتلقّي الأحداث من إحدى الخدمات، عليك تفعيل "سجلات تدقيق السحابة الإلكترونية". من Cloud Console، انقر على IAM & Admin وAudit Logs من القائمة في أعلى يمين الصفحة. في قائمة الخدمات، ضَع علامة في المربّع Google Cloud Storage:

3c654597faed237c.png

على يسار الصفحة، تأكَّد من اختيار Admin وRead وWrite، ثم انقر على Save:

1deb3ad78f11dd5f.png

إنشاء

أنشئ مشغّلاً لتوجيه أحداث إنشاء الملفات الجديدة من الحزمة إلى خدمتك:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

اختبار

تستغرق مشغّلات سجلّات التدقيق بعض الوقت لتهيئة البيانات. يمكنك التأكّد من إنشاء المشغّل من خلال إدراج جميع المشغّلات:

gcloud eventarc triggers list

من المفترض أن يظهر الحقل ACTIVE على النحو التالي: Yes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

حمِّل الملف نفسه إلى حزمة Cloud Storage كما فعلت سابقًا:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

إذا تحقّقت من سجلّات خدمة Cloud Run في Cloud Console، من المفترض أن يظهر لك الحدث الذي تم تلقّيه:

7be7859bcc8976f8.png

9- استكشاف واجهة مستخدم Eventarc

في هذه الخطوة، ستستكشف واجهة مستخدم Eventarc في Google Cloud Console. في واجهة مستخدم Eventarc، يمكنك الحصول على نظرة عامة على جميع المشغّلات وتعديلها وحذفها وإنشاء مشغّلات جديدة من Google Cloud Console.

انتقِل إلى قسم Eventarc في Google Cloud:

81e139f17e0d29bf.png

ستظهر لك قائمة بالمشغّلات التي أنشأتها سابقًا:

3240c7c830398718.png

إذا نقرت على مشغّل، يمكنك الاطّلاع على تفاصيله أو تعديله أو حذفه:

b4d8bbc6601a8b9e.png

يمكنك أيضًا إنشاء عامل مشغِّل جديد من خلال النقر على Create trigger وملء تفاصيل العامل المشغِّل:

3ee290ec72f130d5.png

10. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

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

  • رؤية Eventarc
  • اكتشاف الأحداث في Eventarc
  • إنشاء مخزَن Cloud Run
  • إنشاء مشغّل لخدمة Pub/Sub
  • إنشاء مشغّل لخدمة Cloud Storage
  • إنشاء مشغّل لخدمة Cloud Audit Logs
  • استكشاف واجهة مستخدم Eventarc