كيفية جدولة مهمة Cloud Run ضمن نطاق عناصر التحكّم في خدمة VPC

كيفية جدولة مهمة Cloud Run ضمن نطاق عناصر التحكّم في خدمة VPC

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: يناير 18, 2025
account_circleتأليف موظف Google

1. مقدمة

إذا كان مشروعك على Google Cloud Platform داخل حدود منطقة VPC SC، عليك اتّخاذ خطوات إضافية لإعداد المهام المُجدوَلة. بما أنّ Cloud Scheduler لا يمكنه بدء المهام مباشرةً ضمن حدود "خدمة VPC لإدارة السعة"، عليك تمثيل الطلب من خلال مكوّن آخر. ننصحك باستخدام خدمة Cloud Run كوكيل لهذا الإجراء.

تبدو البنية على النحو التالي:

مخطّط بياني لخدمة Cloud Scheduler التي تبدأ خدمة Cloud Run التي تنفِّذ وظيفة 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.