1. مقدمة
نظرة عامة
دوالّ Cloud Run هي طريقة جديدة لنشر أعباء العمل باستخدام نماذج أحداث GCF وتوقيع الدالة المألوفين. بدلاً من استخدام عملية الإنشاء وإعدادات النشر التي ننصحك بها، تمنحك وظائف Cloud Run إمكانية التحكّم مباشرةً في الخدمة الأساسية التي تم إنشاؤها على Cloud Run.
من خلال وظائف Cloud Run، نقدّم تجربة مستخدم بسيطة لعملية نشر مصدر Cloud Run، ما يمنح المطوّرين إمكانية التحكّم الكامل في أعباء العمل باستخدام إعدادات Cloud Run.
في هذا القسم، ستتعرّف على كيفية نشر دالة مستندة إلى الأحداث في Node. ستنشر دالة يتم تفعيلها عند الانتهاء من تحميل عنصر في حزمة على Google Cloud Storage.
يستخدم هذا الدرس التطبيقي نماذج nodejs في الأمثلة أدناه. ومع ذلك، يمكنك استخدام نماذج رموز الجيل الثاني من Cloud Functions باللغة التي تختارها:
- نماذج وظائف Python
- نماذج وظائف Nodejs
- عيّنات دوال Go
- نماذج لدوالّ Java
- نماذج وظائف PHP
- عيّنات وظائف Ruby
- نماذج وظائف .NET
ما ستتعرّف عليه
- كيفية نشر دالة Cloud Run مستندة إلى الأحداث يتم تفعيلها عند تحميل عنصر إلى حزمة GCS
- كيفية إنشاء حساب خدمة يتضمّن الأدوار المناسبة لتلقّي حدث من Cloud Storage وتشغيل وظيفة Cloud Run
2. إعداد متغيّرات البيئة وتفعيل واجهات برمجة التطبيقات
تحديث gcloud CLI
يتطلب هذا الدليل التعليمي للترميز تثبيت إصدار حديث من gcloud CLI. يمكنك تعديل وحدة تحكّم سطر الأوامر من خلال تشغيل
gcloud components update
تفعيل واجهات برمجة التطبيقات
قبل أن تتمكّن من بدء استخدام هذا الدليل التعليمي للترميز، هناك عدة واجهات برمجة تطبيقات يجب تفعيلها. يتطلّب هذا الدرس التطبيقي استخدام واجهات برمجة التطبيقات التالية. يمكنك تفعيل واجهات برمجة التطبيقات هذه من خلال تنفيذ الأمر التالي:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
إعداد المتغيّرات البيئية
يمكنك ضبط متغيّرات البيئة التي سيتم استخدامها في هذا المختبر البرمجي.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3- إنشاء حزمة تخزين وحساب خدمة
إنشاء حزمة تخزين
يمكنك إنشاء حزمة في Cloud Storage من خلال تنفيذ الأمر التالي:
gsutil mb -l us-central1 gs://$BUCKET_NAME
إنشاء حساب خدمة
في هذا المثال، ستنشئ حساب خدمة يتضمّن أذونات EventArc المطلوبة ودور "مُشغِّل Cloud Run" لتلقّي حدث من Cloud Storage وتشغيل وظيفة Cloud Run.
أولاً، أنشئ حساب الخدمة.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
بعد ذلك، امنح دور Eventarc Event Receiver (roles/eventarc.eventReceiver) في المشروع لحساب الخدمة المرتبط بعامل تشغيل Eventarc حتى يتمكّن عامل التشغيل من تلقّي الأحداث من مقدّمي الأحداث.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
بعد ذلك، امنح حساب الخدمة دور "مُشغِّل Cloud Run" حتى يتمكّن من استدعاء الدالة.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. إنشاء الدالة ونشرها
أولاً، أنشئ دليلاً لرمز المصدر وانتقِل إليه باستخدام الأمر cd.
mkdir ../$SERVICE_NAME && cd $_
بعد ذلك، أنشِئ ملف package.json
يتضمّن المحتوى التالي:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
بعد ذلك، أنشِئ ملف index.js
يتضمّن المحتوى التالي:
const functions = require("@google-cloud/functions-framework"); // Register a CloudEvent callback with the Functions Framework that will // be triggered by Cloud Storage. functions.cloudEvent("helloGCS", (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); const file = cloudEvent.data; console.log(`Bucket: ${file.bucket}`); console.log(`File: ${file.name}`); console.log(`Metageneration: ${file.metageneration}`); console.log(`Created: ${file.timeCreated}`); console.log(`Updated: ${file.updated}`); });
يمكنك الآن نشر دالة Cloud Run من خلال تنفيذ الأمر التالي:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function helloGCS \ --region $REGION \ --no-allow-unauthenticated
ملاحظات:
- تُستخدَم العلامة -source لإخبار Cloud Run بإنشاء الدالة في خدمة مستندة إلى حاوية قابلة للتشغيل.
- يتم استخدام العلامة -function (new) لضبط نقطة دخول الخدمة الجديدة لتكون توقيع الدالة الذي تريد استدعائه.
- (اختياري) العنصر -no-allow-unauthenticated لمنع إمكانية استدعاء وظيفتك بشكل علني
يمكنك عرض خدمتك الجديدة crf-nodejs-event
من خلال تنفيذ الأمر التالي:
gcloud beta run services describe $SERVICE_NAME
5- إنشاء الحدث
يمكننا إنشاء عامل تشغيل Eventarc لإرسال رسائل إلى وظيفتنا في كل مرة يتم فيها الانتهاء من معالجة عنصر في Google Cloud Storage:
BUCKET_REGION=$REGION gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-run-service=crf-nodejs-event \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
ملاحظات:
- gcs-function-trigger هو اسم عامل التشغيل.
- crf-nodejs-event هو اسم خدمة Cloud Run التي تم نشر الدالة فيها.
- بالنسبة إلى العلامة –event-filters، لا تستخدِم البادئة gs:// في اسم الحزمة.
يمكن العثور على دليل تعليمي مفصّل حول إعداد خدمة Trigger من Cloud Storage باستخدام Eventarc في مستندات Cloud Run على الرابط التالي: https://cloud.google.com/run/docs/tutorials/eventarc
6- اختبار الدالة
عند اكتمال عملية النشر، سيظهر لك عنوان URL للخدمة. لتشغيل الدالة، عليك إرسال طلب تمّت مصادقته باستخدام رمز تعريف الهوية الخاص بك أو رمز تعريف الهوية الخاص بمستخدم لديه دور "مُشغِّل Cloud Run"، كما هو موضّح أدناه:
# get the Service URL SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
بعد نشر الدالة وإنشاء عامل تشغيل، أصبحنا جاهزين الآن لاستدعاء الدالة.
أنشئ ملفًا وحمِّله إلى حزمة Cloud Storage. يمكنك إجراء ذلك من خلال واجهة الويب في Cloud Console أو باستخدام أداة سطر الأوامر gsutil، على سبيل المثال:
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
عند تحميل الملف بنجاح، سيتم إنشاء حدث وستطبع الدالة بعض المعلومات الأساسية عن العنصر، مثل اسم الملف. يمكنك العثور على هذا الإخراج في إدخالات السجلّ للدالة في Cloud Console. بدلاً من ذلك، يمكنك طلب هذا الإخراج باستخدام gcloud CLI:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
من المفترض أن يظهر لك الناتج التالي:
"textPayload": "File: test.txt"
7- تهانينا!
تهانينا على إكمال دورة codelab.
ننصحك بمراجعة مستندات وظائف Cloud Run.
المواضيع التي تناولناها
- كيفية نشر دالة Cloud Run مستندة إلى الأحداث يتم تفعيلها عند تحميل عنصر إلى حزمة GCS
- كيفية إنشاء حساب خدمة يتضمّن الأدوار المناسبة لتلقّي حدث من Cloud Storage وتشغيل وظيفة Cloud Run
8. تَنظيم
لتجنُّب الرسوم غير المقصودة (على سبيل المثال، إذا تمّ استدعاء خدمة Cloud Run هذه عن طريق الخطأ أكثر من عدد عمليات استدعاء Cloud Run الشهرية المخصّصة لك في الفئة المجانية)، يمكنك إما حذف خدمة Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.
لحذف خدمات Cloud Run، انتقِل إلى Cloud Run Cloud Console على الرابط https://console.cloud.google.com/run/ وأحذِف خدمة crf-event-codelab
التي أنشأتها في هذا الدليل التعليمي.
إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager واختيار المشروع الذي أنشأته في الخطوة 2 ثم اختيار "حذف". في حال حذف المشروع، عليك تغيير المشاريع في حزمة Cloud SDK. يمكنك عرض قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list
.