Par défaut, chaque tâche s'exécute pendant 10 minutes au maximum. Vous pouvez définir une durée plus courte ou plus longue dans la limite de 168 heures (7 jours). Pour les tâches utilisant des GPU, le délai avant expiration maximal disponible est de 12 heures (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 un délai avant expiration de 10 minutes et 5 secondes, spécifiez la valeur 605 secondes.
Si les nouvelles tentatives sont activées pour votre job, le paramètre de délai avant expiration s'applique à chaque tentative d'une 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 un job s'exécute longtemps, plus il est susceptible de rencontrer des problèmes qui entraînent son échec, tels que des échecs de dépendance en aval, des erreurs de mémoire insuffisante ou des problèmes d'infrastructure. Nous vous recommandons d'activer les nouvelles tentatives pour tous les jobs, en particulier ceux qui comportent des tâches de longue durée.
Événements de maintenance
Les tâches qui n'utilisent pas de GPU sont migrées à chaud lors des événements de maintenance. Les tâches qui utilisent des GPU ne peuvent pas être migrées à chaud et sont arrêtées à la place. En savoir plus
Le processus de migration préserve l'état de la tâche, à une exception notable près : les connexions réseau VPC sortantes sont interrompues lors des événements de maintenance. Nous vous recommandons d'utiliser des bibliothèques clientes pouvant gérer les réinitialisations occasionnelles des connexions.
Cloud Run affiche un message de journal à chaque fois qu'une tâche démarre et termine sa migration.
De plus, 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) } }() }
Jobs GPU de longue durée
Dans certains cas, comme les jobs GPU de longue durée, les événements de maintenance peuvent entraîner la préemption ou l'arrêt d'instances sans migration à chaud.
Pour gérer ces événements de manière appropriée, une option consiste à intercepter le signal SIGTERM, que Cloud Run envoie 10 secondes avant l'arrêt de la tâche, afin d'enregistrer la progression en écrivant les points de contrôle finaux et en enregistrant l'état dans un stockage persistant. Pour en savoir plus, consultez Concevoir des jobs GPU résilients de longue durée.
Toutefois, notez que vous disposez d'environ 10 secondes après SIGTERM avant que la tâche ne soit arrêtée.
Ce délai n'est pas suffisant pour écrire un point de contrôle de modèle volumineux. Traitez le gestionnaire SIGTERM comme un vidage au mieux d'un petit état uniquement, et fiez-vous aux points de contrôle périodiques comme protection principale. Choisissez l'intervalle entre les points de contrôle en fonction de la quantité de travail que vous pouvez vous permettre de perdre.
Étant donné que les tâches GPU ne sont pas migrées à chaud, une tâche configurée avec un délai avant expiration de plusieurs heures doit être interrompue au moins une fois avant de se terminer. Le délai avant expiration de la tâche est un maximum, et non une garantie d'exécution ininterrompue.
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 :
- Développeur Cloud Run (
roles/run.developer) sur le job Cloud Run - Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur l'identité du service
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 APIGoogle 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 pages 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
Dans la console Google Cloud , accédez à la page Cloud Run :
Dans le menu de navigation Cloud Run, sélectionnez Jobs :
Si vous créez un job, cliquez sur Déployer un conteneur pour remplir la page initiale des paramètres du job.
Si vous configurez un job existant, sélectionnez-le, puis cliquez sur Afficher et modifier la configuration du job.
Cliquez sur Conteneurs, Connexions, Sécurité pour développer la page des propriétés du job.
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 que sous la forme d'une 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 Délai avant expiration de la tâche, spécifiez
605et sélectionnez seconde comme Unité de temps.Cliquez sur Créer ou Mettre à jour.
gcloud
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: référence à l'image de conteneur, par exempleus-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,
10m5scorrespond à dix minutes et cinq secondes.
Pour une tâche en cours de mise à jour :
gcloud run jobs update JOB_NAME --task-timeout TIMEOUT
YAML
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 --format export > job.yaml
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 job.
IMAGE_URL: référence à l'image de conteneur, par exempleus-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 que sous la forme d'un nombre entier en secondes, minutes ou heures. Par exemple, pour définir une durée de 10 minutes et 5 secondes, spécifiez
605.
Vous pouvez également spécifier d'autres éléments de configuration, tels que des variables d'environnement ou des limites de mémoire.
Mettez à jour la configuration de job existante :
gcloud run jobs replace job.yaml
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.
Ajoutez les éléments suivants à une ressourcegoogle_cloud_run_v2_job dans votre configuration Terraform :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, utilisez la console Google Cloud ou la Google Cloud CLI :
Console
Dans la console Google Cloud , accédez à la page des jobs Cloud Run :
Cliquez sur le job pour ouvrir la page Informations sur le job.
Cliquez sur Afficher et modifier la configuration d'un job.
Recherchez le paramètre de délai avant expiration de la tâche dans les détails de configuration.
gcloud
Exécutez la commande suivante :
gcloud run jobs describe JOB
Recherchez le paramètre de délai avant expiration de la tâche dans la configuration renvoyée.