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
- Crea un job Cloud Run se non ne hai ancora creato uno.
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:
Crea una nuova directory denominata
cloud-run-jobs-schede accedi alla directory:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Crea un file
Dockerfilee 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
Crea un file
entrypoint.she 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
Crea un file
main.pye 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)))
Crea un file
requirements.txte incolla le seguenti dipendenze:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Crea un file
cronnella 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-jobogni 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
croncon 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 ...
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 esempioeurope-west1.PROJECT_ID: il tuo ID progetto.SERVICE_ACCOUNT: il tuo account di servizio.
Passaggi successivi
Dopo aver utilizzato questa funzionalità, puoi: