Esegui job in base a una pianificazione

Questa pagina descrive come eseguire job Cloud Run in base a una pianificazione utilizzando crontab.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per le operazioni descritte in questa pagina, chiedi all'amministratore di concederti uno dei seguenti ruoli IAM nel tuo job Cloud Run:

  • Per eseguire i job utilizzando Google Cloud CLI: Cloud Run Invoker (roles/run.invoker) sul job Cloud Run.
  • Per eseguire job utilizzando la console Cloud de Confiance , per ignorare le configurazioni dei job o per annullare le esecuzioni dei job: Sviluppatore Cloud Run (roles/run.developer) per il job Cloud Run.

Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo job Cloud Run interagisce con le APICloud de Confiance , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Concedi al account di servizio l'accesso al tuo progetto

Se non hai creato un account di servizio per il tuo job Cloud Run, creane uno. Ad esempio:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

Sostituisci SERVICE_ACCOUNT_NAME con il nome del tuo account di servizio, ad esempio job-scheduler.

Per ottenere le autorizzazioni necessarie al account di servizio per eseguire i job, chiedi all'amministratore di concedere al account di servizio il ruolo Esecutore job (roles/run.jobsExecutor) nel progetto. Ad esempio:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \
    --role roles/run.jobsExecutor

Sostituisci PROJECT_ID con il nome dell'ID progetto.

Prima di iniziare

  1. Crea un job Cloud Run se non ne hai ancora creato uno.
  2. Abilita l'API Cloud Scheduler per il tuo progetto:

    gcloud services enable cloudscheduler.googleapis.com
    

Configura un job Cloud Run da eseguire in base a una pianificazione

Per eseguire un job Cloud Run in base a una pianificazione:

  1. Crea una nuova directory denominata cloud-run-jobs-sched e accedi alla directory:

    mkdir cloud-run-jobs-sched
    cd cloud-run-jobs-sched
  2. Crea un file Dockerfile e incolla al suo interno le seguenti righe:

    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. Crea un file entrypoint.sh e incolla al suo interno le seguenti righe:

    gcloud config set project $PROJECT
    gcloud config set run/region $REGION
    
    cron
    
    gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
  4. Crea un file main.py e incolla al suo interno il seguente codice 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)))
  5. Crea un file requirements.txt e incolla le seguenti dipendenze:

    Flask==3.0.3
    gunicorn==23.0.0
    Werkzeug==3.0.3
  6. Crea un file cron nella directory e aggiungi una pianificazione cron per eseguire il job. Ad esempio:

    0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1

    Questo comando esegue un job denominato test-job ogni giorno alle 2:00. Eventuali errori durante l'avvio dell'esecuzione del job verranno visualizzati nei log del servizio.

    Per creare più pianificazioni per più job, aggiorna il file cron con i job che vuoi eseguire, insieme alla pianificazione associata. Ad esempio:

    ${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. Esegui il deployment del servizio di pianificazione dei job:

    gcloud run deploy JOB \
        --source . \
        --region REGION \
        --set-env-vars PROJECT=PROJECT_ID,REGION=REGION \
        --service-account SERVICE_ACCOUNT \
        --no-allow-unauthenticated \
        --min-instances=1 \
        --no-cpu-throttling

    Sostituisci quanto segue:

    • JOB: il nome del job Cloud Run.
    • REGION: la regione del job Cloud Run, ad esempio europe-west1.
    • PROJECT_ID: il tuo ID progetto.
    • SERVICE_ACCOUNT: il tuo account di servizio.

Passaggi successivi

Dopo aver utilizzato questa funzionalità, puoi: