Halaman ini menjelaskan cara menjalankan tugas Cloud Run sesuai jadwal menggunakan crontab.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk operasi yang dijelaskan di halaman ini, minta administrator Anda untuk memberi Anda salah satu peran IAM berikut pada tugas Cloud Run Anda:
- Untuk menjalankan tugas menggunakan Google Cloud CLI: Cloud Run Invoker (
roles/run.invoker) pada tugas Cloud Run. - Untuk menjalankan tugas menggunakan konsol Cloud de Confiance , mengganti konfigurasi tugas, atau membatalkan eksekusi tugas: Cloud Run Developer (
roles/run.developer) pada tugas Cloud Run.
Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika tugas Cloud Run Anda berinteraksi dengan Cloud de Confiance API, seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.
Memberi akun layanan akses ke project Anda
Jika Anda belum membuat akun layanan untuk tugas Cloud Run, buat akun layanan. Contoh:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan Anda,
misalnya, job-scheduler.
Untuk mendapatkan izin yang diperlukan akun layanan Anda untuk menjalankan tugas, minta
administrator Anda untuk memberi akun layanan Anda peran
Jobs Executor
(roles/run.jobsExecutor) di project Anda. Contoh:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
Ganti PROJECT_ID dengan nama project ID Anda.
Sebelum memulai
Buat tugas Cloud Run jika Anda belum membuat satu pun.
Mengonfigurasi tugas Cloud Run untuk dijalankan sesuai jadwal
Untuk menjalankan tugas Cloud Run sesuai jadwal:
Buat direktori baru bernama
cloud-run-jobs-scheddan ubah direktori tersebut kedalamnya:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Buat file
Dockerfiledan tempelkan baris berikut ke dalamnya: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
Buat file
entrypoint.shdan tempelkan baris berikut ke dalamnya:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Buat file
main.pydan tempelkan kode Python berikut ke dalamnya: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)))
Buat file
requirements.txtdan tempelkan dependensi berikut ke dalamnya:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Buat file
crondi direktori Anda dan tambahkan jadwal cron untuk menjalankan tugas. Contoh:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Perintah ini menjalankan tugas bernama
test-jobsetiap hari pukul 02.00. Error apa pun yang memulai eksekusi tugas akan ditampilkan di log layanan.Untuk membuat beberapa jadwal untuk beberapa tugas, perbarui file
crondengan tugas apa pun yang ingin Anda jalankan, beserta jadwal terkaitnya. Contoh:${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 ...
Deploy layanan penjadwal tugas:
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
Ganti kode berikut:
- JOB-NAME: nama tugas Cloud Run Anda.
- PROJECT_ID: project ID Anda.
- REGION: region untuk tugas Cloud Run Anda, misalnya,
europe-west1.
Langkah berikutnya
Setelah menggunakan fitur ini, Anda dapat melakukan hal berikut: