本頁面說明如何使用 crontab 依排程執行 Cloud Run 工作。
必要的角色
如要取得本頁面所述作業所需的權限,請要求管理員在 Cloud Run 作業中授予下列其中一個 IAM 角色:
- 如要使用 Google Cloud CLI 執行工作,請對 Cloud Run 工作使用 Cloud Run Invoker (
roles/run.invoker)。 - 如要使用 Cloud de Confiance 控制台執行工作、覆寫工作設定或取消工作執行作業,您必須具備 Cloud Run 工作的「Cloud Run 開發人員」 (
roles/run.developer) 角色。
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 作業與Cloud de Confiance API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
授予服務帳戶專案存取權
如果您尚未為 Cloud Run 作業建立服務帳戶,請建立服務帳戶。例如:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將 SERVICE_ACCOUNT_NAME 替換為服務帳戶名稱,例如 job-scheduler。
如要取得服務帳戶執行工作所需的權限,請要求管理員授予服務帳戶專案的「工作執行者」(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 替換為您的專案 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
這項指令會在每天凌晨 2 點執行名為
test-job的工作。服務記錄會顯示啟動工作執行作業時發生的任何錯誤。如要為多項工作建立多個時間表,請更新
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:您的專案 ID。
- REGION:Cloud Run 工作的區域,例如
europe-west1。
後續步驟
使用這項功能後,您可以執行下列操作: