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 sul tuo job Cloud Run:

  • Per eseguire job utilizzando Google Cloud CLI: Cloud Run Invoker (roles/run.invoker) sul job Cloud Run.
  • Per eseguire job utilizzando la Cloud de Confiance console, per sostituire le configurazioni dei job o per annullare le esecuzioni dei job: Cloud Run Developer (roles/run.developer) sul 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 Cloud de Confiance API, 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 tuo account di servizio per eseguire i job, chiedi all'amministratore di concedere al tuo account di servizio il ruolo Esecutore job (roles/run.jobsExecutor) nel tuo 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 del tuo ID progetto.

Prima di iniziare

Crea un job Cloud Run se non l'hai ancora creato.

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 passa a questa directory:

    mkdir cloud-run-jobs-sched
    cd cloud-run-jobs-sched
  2. Crea un file Dockerfile e incolla 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 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 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 tutti 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_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

    Sostituisci quanto segue:

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

Passaggi successivi

Dopo aver utilizzato questa funzionalità, puoi: