1. מבוא
סקירה כללית
אם פרויקט GCP שלכם נמצא בתוך היקף של VPC SC, תצטרכו לבצע שלבים נוספים כדי להגדיר משימות מתוזמנות. מכיוון ש-Cloud Scheduler לא יכול להפעיל ישירות משימות בתוך גבולות גזרה של VPC SC, תצטרכו להעביר את הבקשה דרך רכיב אחר. מומלץ להשתמש בשירות Cloud Run כשרת proxy.
הארכיטקטורה נראית כך:

מה תלמדו
- איך מריצים משימת Cloud Run לפי לוח זמנים בתוך מתחם אבטחה היקפית של VPC
- איך יוצרים שירות Cloud Run שמפעיל משימת Cloud Run באמצעות ספריות הלקוח של Cloud Run
- איך מגדירים את Cloud Scheduler להפעלת שירות Cloud Run לפי לוח זמנים
2. לפני שמתחילים
קודם כל, מוודאים שביצעתם את השלבים להגדרת Cloud Run ל-VPC Service Controls.
בשלב הבא, מגדירים משתני סביבה שישמשו לאורך כל ה-codelab.
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
ב-Codelab הזה נעשה שימוש בקונטיינר לדוגמה של משימות 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 jobs documentation.
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
- איך יוצרים שירות Cloud Run שמפעיל משימת Cloud Run באמצעות ספריות הלקוח של Cloud Run
- איך מגדירים את Cloud Scheduler להפעלת שירות Cloud Run לפי לוח זמנים
8. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם שירותי Cloud Run מופעלים בטעות יותר פעמים מהמכסה החודשית של הפעלות Cloud Run בתוכנית ללא תשלום), אפשר למחוק את שירותי GCP או את הפרויקט שיצרתם בשלב 2.
כדי למחוק את שירות Cloud Run ואת משימת Cloud Run, נכנסים אל Cloud Run Cloud Console בכתובת https://console.cloud.google.com/run ומוחקים את השירות.
אם אתם רוצים למחוק את הפרויקט כולו, אתם יכולים להיכנס לכתובת https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 וללחוץ על 'מחיקה'. אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי לראות את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list.