لمحة عن هذا الدرس التطبيقي حول الترميز
1. مقدمة
نظرة عامة
إذا كان مشروعك على Google Cloud Platform داخل حدود منطقة VPC SC، عليك اتّخاذ خطوات إضافية لإعداد المهام المُجدوَلة. بما أنّ Cloud Scheduler لا يمكنه بدء المهام مباشرةً ضمن حدود "خدمة VPC لإدارة السعة"، عليك تمثيل الطلب من خلال مكوّن آخر. ننصحك باستخدام خدمة Cloud Run كوكيل لهذا الإجراء.
تبدو البنية على النحو التالي:
ما ستتعرّف عليه
- كيفية تنفيذ مهمة Cloud Run وفقًا لجدول زمني داخل حدود عناصر التحكّم في خدمة السحابة الإلكترونية الخاصة الافتراضية (VPC-SC)
- كيفية إنشاء خدمة Cloud Run تشغِّل وظيفة Cloud Run باستخدام مكتبات عملاء Cloud Run
- كيفية ضبط Cloud Scheduler لتشغيل خدمة Cloud Run وفقًا لجدول زمني
2. قبل البدء
أولاً، تأكَّد من اتّباع خطوات إعداد Cloud Run لاستخدام عناصر التحكّم في خدمة سحابة VPC.
بعد ذلك، اضبط متغيّرات البيئة التي سيتم استخدامها في هذا المختبر البرمجي.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION> AR_REPO=sample-job-repo CLOUD_RUN_SERVICE=job-runner-service CLOUD_RUN_JOB=sample-job CLOUD_SCHEDULER=job-scheduler SERVICE_ACCOUNT="cloud-run-invoker-sa" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com NETWORK=default SUBNET=default
3. إنشاء وظيفة Cloud Run
يستخدم هذا الدليل التعليمي نموذج حاوية مهام Cloud Run.
أولاً، أنشئ مستودعًا في Artifact Registry لحاوية مهمة Cloud Run.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
بعد ذلك، انسخ نموذج حاوية مهام Cloud Run إلى "مستودع عناصر" ضمن مشروعك الذي تم ضبطه باستخدام "شبكة VPC المستندة إلى الخدمات". يمكنك استخدام أداة gcrane لإجراء ذلك من خلال اتّباع تعليمات التثبيت هذه. يمكنك الاطّلاع على مزيد من المعلومات حول gcrane في مستندات نسخ الصور بين المستودعات.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
ثانيًا، يمكنك نشر مهمة Cloud Run المتوافقة مع عناصر التحكّم في خدمة سحابة VPC.
gcloud run jobs create $CLOUD_RUN_JOB --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic
لمزيد من المعلومات عن إنشاء "المهام"، يُرجى اتّباع الخطوات الواردة هنا في مستندات "مهام Cloud Run".
4. إنشاء حساب خدمة
ستستخدم Cloud Run حساب الخدمة هذا لاستدعاء مهمة Cloud Run.
أولاً، أنشئ حساب الخدمة من خلال تنفيذ هذا الأمر:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
ثانيًا، امنح حساب الخدمة دور "مُشغِّل Cloud Run" ودور "مُشاهد Cloud Run".
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.viewer
5. إنشاء خدمة Cloud Run
في هذه الخطوة، ستنشر خدمة Cloud Run تعمل كخادم وكيل.
mkdir job-runner-service && cd $_
أنشئ ملفًا باسم main.py
باستخدام الرمز البرمجي التالي.
import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
أنشئ ملفًا باسم requirements.txt
باستخدام الرمز البرمجي التالي.
google-cloud-run flask
أخيرًا، أنشئ Dockerfile
.
FROM python:3.9-slim-buster # for logging purposes ENV PYTHONUNBUFFERED=True WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python3", "main.py"]
بعد ذلك، أنشئ الحاوية باستخدام أوامر docker التالية. يُرجى العِلم أنّه قد يكون من الصعب إعداد عمليات النشر المستندة إلى المصدر في بيئة VPC SC. إذا كان لديك مسار حالي لبناء التطبيق ونشره، استخدِمه لإنشاء رمز المصدر في حاوية ونشر الحاوية كخدمة على Cloud Run.
docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE
يمكنك الآن نشر خدمة Cloud Run المتوافقة مع عناصر التحكّم في خدمة سحابة VPC.
gcloud run deploy $CLOUD_RUN_SERVICE --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic \ --no-allow-unauthenticated \ --ingress internal
احفظ عنوان URL لنقطة نهاية الخدمة من خلال تنفيذ هذا الأمر:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. إنشاء وظيفة في Cloud Scheduler لبدء الخدمة
# create the Cloud Scheduler job gcloud scheduler jobs create http $CLOUD_SCHEDULER \ --location=$REGION \ --schedule="0 0 1 * *" \ --uri=$SERVICE_URL \ --http-method=GET \ --oidc-service-account-email=$SERVICE_ACCOUNT_ADDRESS
بعد إنشاء وظيفة Cloud Scheduler، يمكنك تنفيذ الأمر التالي لتشغيل وظيفة Cloud Scheduler على الفور لأغراض الاختبار:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
ملاحظة:
قد تحتاج إلى الانتظار بضع دقائق حتى تكتمل عملية تنفيذ المهمة. يمكنك تتبُّع حالته في صفحة "جدولة Cloud Run".
تأكَّد من نجاح تشغيل مهمة Cloud Run من خلال تنفيذ الأوامر التالية:
EXECUTION_NAME=$(gcloud run jobs describe $CLOUD_RUN_JOB --region $REGION --format 'value(status.latestCreatedExecution.name)') gcloud run jobs executions describe $EXECUTION_NAME --region $REGION
من المفترض أن يظهر لك ما يلي:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. تهانينا!
تهانينا على إكمال دورة codelab.
المواضيع التي تناولناها
- كيفية تنفيذ مهمة Cloud Run وفقًا لجدول زمني داخل حدود عناصر التحكّم في خدمة السحابة الإلكترونية الخاصة الافتراضية (VPC-SC)
- كيفية إنشاء خدمة Cloud Run تشغِّل وظيفة Cloud Run باستخدام مكتبات عملاء Cloud Run
- كيفية ضبط Cloud Scheduler لتشغيل خدمة Cloud Run وفقًا لجدول زمني
8. تَنظيم
لتجنُّب تحصيل رسوم بدون قصد (على سبيل المثال، إذا تمّ استدعاء خدمات Cloud Run بدون قصد أكثر من عدد عمليات الاستدعاء الشهرية المخصّصة لك في الفئة المجانية)، يمكنك إما حذف خدمات Google Cloud Platform أو حذف المشروع الذي أنشأته في الخطوة 2.
لحذف خدمة Cloud Run ووظيفتها، انتقِل إلى وحدة تحكّم Cloud Run على الرابط https://console.cloud.google.com/run واحذِف الخدمة.
إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager واختيار المشروع الذي أنشأته في الخطوة 2 ثم اختيار "حذف". في حال حذف المشروع، عليك تغيير المشاريع في حزمة Cloud SDK. يمكنك عرض قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list
.