Menjalankan tugas sesuai jadwal

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:

  1. Buat direktori baru bernama cloud-run-jobs-sched dan ubah direktori tersebut kedalamnya:

    mkdir cloud-run-jobs-sched
    cd cloud-run-jobs-sched
  2. Buat file Dockerfile dan 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
  3. Buat file entrypoint.sh dan 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
  4. Buat file main.py dan 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)))
  5. Buat file requirements.txt dan tempelkan dependensi berikut ke dalamnya:

    Flask==3.0.3
    gunicorn==23.0.0
    Werkzeug==3.0.3
  6. Buat file cron di 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-job setiap 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 cron dengan 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
    ...
  7. 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: