בדף הזה מוסבר איך להריץ משימות של Cloud Run לפי לוח זמנים באמצעות crontab.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לפעולות שמתוארות בדף הזה, צריך לבקש מהאדמין להקצות לכם אחד מתפקידי ה-IAM הבאים בעבודת Cloud Run:
- כדי להריץ משימות באמצעות Google Cloud CLI: Cloud Run Invoker (
roles/run.invoker) במשימה ב-Cloud Run. - כדי להריץ משימות באמצעות מסוף Cloud de Confiance , כדי לשנות את ההגדרות של המשימות או כדי לבטל את ההרצה של המשימות: Cloud Run Developer (
roles/run.developer) במשימה ב-Cloud Run.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם עבודת Cloud Run שלכם מתקשרת עםCloud de Confiance ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
מעניקים לחשבון השירות גישה לפרויקט
אם לא יצרתם חשבון שירות בשביל העבודה שלכם ב-Cloud Run, אתם צריכים ליצור חשבון שירות. לדוגמה:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את SERVICE_ACCOUNT_NAME בשם של חשבון השירות, לדוגמה, job-scheduler.
כדי לקבל את ההרשאות שחשבון השירות צריך כדי להריץ משימות, צריך לבקש מהאדמין להקצות לחשבון השירות את התפקיד Jobs Executor (roles/run.jobsExecutor) בפרויקט. לדוגמה:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
מחליפים את PROJECT_ID במזהה הפרויקט.
לפני שמתחילים
אם עדיין לא יצרתם עבודה ב-Cloud Run, אתם צריכים ליצור עבודה.
הגדרת משימת Cloud Run לביצוע לפי לוח זמנים
כדי להריץ משימת Cloud Run לפי לוח זמנים:
יוצרים ספרייה חדשה בשם
cloud-run-jobs-schedועוברים אליה:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
יוצרים קובץ
Dockerfileומדביקים בו את השורות הבאות:FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:536.0.1 RUN apt-get update -y && \ apt-get install -y python3-dev python3-pip python3-venv && \ apt-get install -y cron ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN pip install --no-cache-dir -r requirements.txt # Set up the cron schedule. RUN crontab /app/cron CMD /app/entrypoint.sh
יוצרים קובץ
entrypoint.shומדביקים בו את השורות הבאות:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
יוצרים קובץ
main.pyומדביקים בו את קוד Python הבא:import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
יוצרים קובץ
requirements.txtומדביקים בו את התלות הבאה:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
יוצרים קובץ
cronבספרייה ומוסיפים תזמון cron להרצת העבודה. לדוגמה:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
הפקודה הזו מריצה משימה בשם
test-jobכל יום בשעה 2:00. כל השגיאות שיתרחשו במהלך הפעלת המשימה יוצגו ביומנים של השירות.כדי ליצור כמה לוחות זמנים לכמה משימות, מעדכנים את הקובץ
cronעם כל המשימות שרוצים להריץ, ועם לוח הזמנים שמשויך לכל אחת מהן. לדוגמה:${cron_schedule} gcloud run jobs execute --async ${job_1} > /proc/1/fd/1 2>&1 ${cron_schedule} gcloud run jobs execute --async ${job_2} > /proc/1/fd/1 2>&1 ...
פריסת שירות מתזמן המשימות:
gcloud run deploy JOB_NAME \ --source . \ --region REGION \ --set-env-vars PROJECT=PROJECT_ID,REGION=REGION \ --service-account SERVICE_ACCOUNT \ --no-allow-unauthenticated \ --min-instances=1 \ --no-cpu-throttling
מחליפים את מה שכתוב בשדות הבאים:
- JOB-NAME: השם של המשימה ב-Cloud Run.
- PROJECT_ID: מזהה הפרויקט.
- REGION: האזור של משימת Cloud Run, לדוגמה,
europe-west1.
המאמרים הבאים
אחרי שתשתמשו בתכונה הזו, תוכלו לבצע את הפעולות הבאות: