Définir le délai avant expiration de la tâche (jobs)

Par défaut, chaque tâche s'exécute pendant 10 minutes maximum. Vous pouvez définir une durée plus courte ou plus longue dans la limite de 168 heures (7 jours). La prise en charge des délais avant expiration supérieurs à 24 heures est disponible en preview.

Vous pouvez définir le délai avant expiration d'une tâche comme décrit sur cette page. Il n'y a pas de délai explicite pour l'exécution d'un job : lorsque toutes les tâches sont terminées, l'exécution du job est terminée.

Les unités spécifient une durée. Vous pouvez spécifier la durée du délai avant expiration sous la forme d'une valeur entière en secondes, minutes ou heures. Par exemple, pour définir la durée du délai avant expiration sur 10 minutes et 5 secondes, spécifiez la valeur 605 secondes.

Si la répétition de tentatives est activée pour votre tâche, le paramètre de délai avant expiration s'applique à chaque tentative d'exécution de la tâche. Si la tentative d'exécution de l'opération ne se termine pas dans ce délai, elle sera arrêtée. Plus une tâche s'exécute longtemps, plus elle est susceptible de rencontrer des problèmes qui l'empêchent de s'exécuter, tels que des échecs de dépendances en aval, des erreurs de mémoire insuffisante ou des problèmes d'infrastructure. Nous vous recommandons d'activer les nouvelles tentatives pour toutes les tâches, en particulier pour celles comportant des tâches de longue durée.

Observer et gérer les événements de maintenance

Les jobs peuvent régulièrement subir des événements de maintenance. Lors d'un événement de maintenance, toutes les tâches en cours sont migrées de la machine actuelle vers une autre machine. Ce processus de migration conserve l'état complet de la tâche. Toutefois, le traitement est brièvement suspendu pendant le traitement de la tâche.

Les événements de maintenance sont transparents : vous n'avez pas besoin de modifier votre conteneur pour les gérer. Notez qu'à chaque fois qu'une tâche démarre et termine sa migration, Cloud Run affiche un message de journal.

Toutefois, si vous souhaitez surveiller ou gérer des événements de maintenance d'une manière spécifique, vous pouvez intercepter le signal SIGTSTP, qui est envoyé 10 secondes avant la migration d'une tâche. Après la migration, la tâche reçoit un signal SIGCONT immédiatement après son redémarrage.

L'exemple Go suivant est une fonction qui détecte ces signaux et affiche une entrée de journal :

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer des jobs Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :

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 API Google Cloud, 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 sections Autorisations de déploiement et Gérer les accès.

Définir le délai avant expiration d'une tâche

Pour spécifier le délai avant expiration d'une tâche Cloud Run, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page des jobs Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur Déployer un conteneur, puis sélectionnez Job pour remplir la page initiale des paramètres du job. Si vous configurez un job existant, cliquez sur celui-ci, puis sur Modifier.

  3. Cliquez sur Conteneur, variables et secrets, connexions, sécurité pour développer la page des propriétés du job.

  4. Cliquez sur l'onglet Général.

    image

    • Dans le champ Délai avant expiration de la tâche, spécifiez la durée maximale des tâches du job en cours, puis sélectionnez une unité de temps. Vous ne pouvez spécifier la durée du délai avant expiration qu'en tant que valeur entière en secondes, minutes ou heures. Par exemple, pour définir une durée de 10 minutes et 5 secondes, dans le champ Expiration de la tâche, spécifiez 605, puis sélectionnez seconde comme unité de temps.
  5. Cliquez sur Créer ou Mettre à jour.

gcloud

  1. Pour un job que vous êtes en train de créer :

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    Remplacer

    • JOB_NAME par le nom de votre job.
    • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT par la durée maximale des tâches du job, en spécifiant la durée et les unités. Par exemple, 10m5s correspond à dix minutes et cinq secondes.
  2. Pour une tâche en cours de mise à jour :

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. Si vous créez un job, ignorez cette étape. Si vous mettez à jour un job existant, téléchargez sa configuration YAML :

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Mettez à jour l'attribut timeoutSeconds: :

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    Remplacez :

    • JOB_NAME par le nom de votre tâche.
    • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT par la durée maximale des tâches du job, en spécifiant la durée et les unités. Vous ne pouvez spécifier la durée qu'en tant que valeur entière en secondes, minutes ou heures. Par exemple, pour définir une durée de 10 minutes et 5 secondes, spécifiez 605s.

    Vous pouvez également spécifier d'autres éléments de configuration, tels que des variables d'environnement ou des limites de mémoire.

  3. Mettez à jour la configuration de job existante :

    gcloud run jobs replace job.yaml

Terraform

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Pour spécifier le délai avant expiration d'un job Cloud Run, utilisez la ressource google_cloud_run_v2_job et appliquez l'extrait suivant à votre fichier main.tf :

resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

Afficher les paramètres du délai avant expiration de la tâche

Pour afficher les paramètres actuels d'expiration des opérations pour votre tâche Cloud Run, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page des jobs Cloud Run :

    Accéder aux jobs Cloud Run

  2. Cliquez sur le job qui vous intéresse pour ouvrir la page Informations sur le job.

  3. Cliquez sur l'onglet Configuration.

  4. Recherchez le paramètre de délai avant expiration de la tâche dans les détails de configuration.

gcloud

  1. Exécutez la commande suivante :

    gcloud run jobs describe JOB_NAME
  2. Recherchez le paramètre de délai avant expiration de la tâche dans la configuration renvoyée.

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

source "https://rubygems.org"

gem "functions_framework", "~> 1.4"