מידע על Codelab זה
1. מבוא
סקירה כללית
אם הפרויקט ב-GCP נמצא בתוך גבולות של VPC SC, תצטרכו לבצע פעולות נוספות כדי להגדיר משימות מתוזמנות. מכיוון ש-Cloud Scheduler לא יכול להפעיל משימות ישירות בתוך תחומי VPC SC, תצטרכו להעביר את הבקשה דרך רכיב אחר. מומלץ להשתמש בשירות Cloud Run בתור שרת ה-proxy הזה.
הארכיטקטורה נראית כך:
מה תלמדו
- איך מריצים משימה ב-Cloud Run לפי לוח זמנים בתוך מתחם VPC SC
- איך יוצרים שירות Cloud Run שמפעיל משימה ב-Cloud Run באמצעות ספריות הלקוח של Cloud Run
- איך מגדירים את Cloud Scheduler להפעלת שירות Cloud Run לפי לוח זמנים
2. לפני שמתחילים
קודם כול, חשוב לוודא שביצעתם את השלבים להגדרת Cloud Run ל-VPC Service Controls.
בשלב הבא מגדירים משתני סביבה שישמשו לאורך כל סדנת הקוד.
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 ל-Artifact Registry בפרויקט שבו הגדרתם את VPC SC. כדי לעשות זאת, אפשר להשתמש בכלי 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 Service Controls.
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 Invoker ואת התפקיד Cloud Run Viewer.
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 שישמש כשרתי proxy.
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 Service Controls.
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 Scheduler.
מריצים את הפקודות הבאות כדי לוודא שהמשימה ב-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 מופעלים בטעות יותר פעמים מההקצאה החודשית שלכם להפעלות של Cloud Run בתוכנית ללא תשלום), אתם יכולים למחוק את שירותי GCP או למחוק את הפרויקט שיצרתם בשלב 2.
כדי למחוק את שירות Cloud Run ואת המשימה ב-Cloud Run, נכנסים למסוף Cloud של Cloud Run בכתובת https://console.cloud.google.com/run ומוחקים את השירות.
אם בוחרים למחוק את הפרויקט כולו, אפשר לעבור אל https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 ולבחור באפשרות Delete (מחיקה). אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי להציג את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list
.