Cette page explique comment exécuter des tâches Cloud Run de manière planifiée à l'aide de crontab.
Rôles requis
Pour obtenir les autorisations nécessaires pour effectuer les opérations décrites sur cette page, demandez à votre administrateur de vous accorder l'un des rôles IAM suivants sur votre job Cloud Run :
- Pour exécuter des jobs à l'aide de Google Cloud CLI : Demandeur Cloud Run (
roles/run.invoker) sur le job Cloud Run. - Pour exécuter des jobs à l'aide de la Cloud de Confiance console, remplacer des configurations de jobs ou annuler des exécutions de jobs : Développeur Cloud Run (
roles/run.developer) sur le job Cloud Run.
Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre job Cloud Run communique avec Cloud de Confiance des API, telles que des bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.
Autoriser le compte de service à accéder à votre projet
Si vous n'avez pas créé de compte de service pour votre job Cloud Run, créez-en un. Exemple :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez SERVICE_ACCOUNT_NAME par le nom de votre compte de service,
par exemple job-scheduler.
Pour obtenir les autorisations dont votre compte de service a besoin pour exécuter des jobs, demandez à votre
administrateur d'accorder à votre compte de service le
rôle Exécuteur de jobs
(roles/run.jobsExecutor) sur votre projet. Exemple :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
Remplacez PROJECT_ID par le nom de votre ID de projet.
Avant de commencer
Créez un job Cloud Run si vous n'en avez pas encore créé.
Configurer un job Cloud Run pour qu'il s'exécute selon une programmation
Pour exécuter un job Cloud Run selon une programmation :
Créez un répertoire nommé
cloud-run-jobs-schedet modifiez les sous-répertoires comme suit :mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Créez un fichier
Dockerfileet collez-y les lignes suivantes :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
Créez un fichier
entrypoint.shet collez-y les lignes suivantes :gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Créez un fichier
main.pyet collez-y le code Python suivant :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)))
Créez un fichier
requirements.txtet collez-y les dépendances suivantes :Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Créez un fichier
crondans votre répertoire et ajoutez une programmation cron pour exécuter le job. Exemple :0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Cette commande exécute un job appelé
test-jobtous les jours à 2h du matin. Toutes les erreurs de démarrage de l'exécution du job s'affichent dans les journaux du service.Pour créer plusieurs programmations pour plusieurs jobs, mettez à jour le fichier
cronavec les jobs que vous souhaitez exécuter, ainsi que leur programmation associée. Exemple :${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 ...
Déployez le service de programmation de jobs :
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
Remplacez les éléments suivants :
- JOB-NAME par le nom de votre job Cloud Run
- PROJECT_ID : ID du projet.
- REGION : région de votre job Cloud Run, par
exemple
europe-west1.
Étape suivante
Après avoir utilisé cette fonctionnalité, vous pouvez effectuer les opérations suivantes :