Exécuter des jobs selon un calendrier

Cette page explique comment exécuter des tâches Cloud Run de manière planifiée en utilisant 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 console Cloud de Confiance , 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 des APICloud de Confiance , 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.

Accorder au compte de service l'accès à votre projet

Si vous n'avez pas créé de compte de service pour votre job Cloud Run, faites-le. 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 de lui accorder 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 l'ID de votre projet.

Avant de commencer

  1. Créez un job Cloud Run si vous n'en avez pas encore créé.
  2. Activez l'API Cloud Scheduler pour votre projet :

    gcloud services enable cloudscheduler.googleapis.com
    

Configurer un job Cloud Run pour qu'il s'exécute selon une programmation

Pour exécuter un job Cloud Run selon une programmation, procédez comme suit :

  1. Créez un répertoire nommé cloud-run-jobs-sched et modifiez les sous-répertoires comme suit :

    mkdir cloud-run-jobs-sched
    cd cloud-run-jobs-sched
  2. Créez un fichier Dockerfile et 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
  3. Créez un fichier entrypoint.sh et 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
  4. Créez un fichier main.py et 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)))
  5. Créez un fichier requirements.txt et collez-y les dépendances suivantes :

    Flask==3.0.3
    gunicorn==23.0.0
    Werkzeug==3.0.3
  6. Créez un fichier cron dans 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-job tous les jours à 2h du matin. Toutes les erreurs liées au démarrage de l'exécution du job s'affichent dans les journaux du service.

    Pour créer plusieurs plannings pour plusieurs jobs, mettez à jour le fichier cron avec les jobs que vous souhaitez exécuter, ainsi que leur planification 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
    ...
  7. Déployez le service de planification des jobs :

    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

    Remplacez les éléments suivants :

    • JOB par le nom de votre job Cloud Run
    • REGION : région de votre job Cloud Run, par exemple europe-west1.
    • PROJECT_ID : ID de votre projet.
    • SERVICE_ACCOUNT : votre compte de service.

Étapes suivantes

Après avoir utilisé cette fonctionnalité, vous pouvez effectuer les opérations suivantes :