Limiter les durées d'exécution des tâches et des exécutables à l'aide de délais avant expiration

Ce document explique comment limiter les durées d'exécution des tâches et des exécutables en définissant des délais avant expiration.

Un délai avant expiration spécifie la durée pendant laquelle une tâche ou un exécutable est autorisé s'exécuter. Batch n'autorise pas l'exécution des jobs pendant plus de 14 jours et ne définit pas de délais avant expiration par défaut pour les tâches individuelles et et des exécutables. Par conséquent, une tâche ou un exécutable individuels peuvent s'exécuter pendant 14 jours avant d'échouer automatiquement. Toutefois, si vos tâches et exécutables ne sont pas destinés à s'exécuter aussi longtemps, cette configuration peut entraîner des coûts et des retards inattendus. Pour éviter des temps d'exécution excessifs, vous pouvez définir des délais avant expiration pour les tâches et et des exécutables.

Avant de commencer

  1. Si vous n'avez jamais utilisé Batch auparavant, consultez Premiers pas avec Batch et activez Batch en suivant la les conditions préalables pour les projets et les utilisateurs.
  2. Pour obtenir les autorisations nécessaires à la création d'un job, demandez à votre administrateur de vous accorder le rôles IAM suivants:

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Définir les délais avant expiration

Vous pouvez définir des délais avant expiration pour les exécutables, les tâches ou les deux. Le délai d'inactivité d'une exécutable spécifie la durée d'exécution maximale de cet exécutable. Le délai avant expiration d'une tâche spécifie la durée d'exécution maximale de cette tâche, qui correspond à la somme de toutes les durées d'exécution individuelles de ses exécutables. Par exemple, si une tâche comporte trois runnables qui s'exécutent tous en même temps pendant une minute, la durée d'exécution de la tâche est de trois minutes, et non d'une minute.

Si vous définissez des délais d'expiration qui se chevauchent (par exemple, un délai d'expiration pour un exécutable et la tâche de l'exécutable), un seul délai d'expiration doit être dépassé pour déclencher un échec automatique. Par exemple, supposons que vous définissiez le délai avant expiration d'une tâche sur 60 secondes et le délai avant expiration de chacun des exécutables de cette tâche pour 120 secondes. Ensuite, cet exemple de tâche et tous ses exécutables échouent lorsque la somme des durées d'exécution de ses exécutables dépasse 60 secondes, et il est impossible de déclencher les délais avant expiration de 120 secondes.

Pour choisir le délai avant expiration approprié à définir pour les tâches et les exécutables de votre tâche, analysez les journaux des tâches similaires que vous avez déjà exécutées afin de déterminer la durée d'exécution typique des tâches et des exécutables pour des charges de travail similaires.

Définir un délai d'inactivité pour une tâche

Utilisez la Google Cloud CLI ou l'API REST pour créer une tâche incluant le champ maxRunDuration dans l'objet taskSpec du fichier JSON :

{
    "taskGroups": [
      {
        "taskSpec": {
          ...
          "maxRunDuration": "TIMEOUT"
        }
      }
    ]
}

Remplacez TIMEOUT par le nombre maximal de secondes ou de sections fractionnaires pendant lesquelles vous souhaitez autoriser l'exécution de la tâche. Exemple :255s

Une tâche qui définit un délai avant expiration de 255 secondes pour une tâche aura un fichier de configuration JSON semblable à celui-ci :

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              }
            }
          ],
          "maxRunDuration": "255s"
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Si le délai avant expiration d'une tâche est dépassé, la tâche échoue automatiquement et le délai avant expiration dépassé est indiqué par le code de sortie 50005 dans les les événements d'état et les journaux. Pour en savoir plus sur les délais avant expiration dépassés, consultez la documentation de dépannage pour le code de sortie 50005.

Définir un délai d'inactivité pour un exécutable

Utilisez la Google Cloud CLI ou l'API REST pour créer une tâche incluant le champ timeout dans l'objet runnable du fichier JSON :

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              ...
              "timeout": "TIMEOUT"
            }
          ]
        }
      }
    ]
}

Remplacez TIMEOUT par le nombre maximal de secondes ou de sections fractionnaires que vous souhaitez autoriser pour l'exécutable. Exemple : 3.5s.

Une tâche qui définit un délai avant expiration de 3,5 secondes pour un exécutable aura un fichier de configuration JSON semblable à celui-ci :

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              },
              "timeout": "3.5s"
            }
          ]
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Si le délai avant expiration d'un exécutable est dépassé, l'exécutable échoue automatiquement et le délai avant expiration dépassé est indiqué par le code de sortie 50005 dans les événements d'état et les journaux de la tâche. Pour en savoir plus sur les délais avant expiration dépassés, consultez la documentation de dépannage pour le code de sortie 50005.

Étape suivante