Planifier des tâches dépendantes

Ce document explique comment créer et exécuter un job qui n'est planifié qu'une fois que des jobs spécifiques ont réussi ou échoué. Pour en savoir plus sur les états des tâches, consultez Présentation de la création et de l'exécution des tâches.

Si vous avez une charge de travail avec des besoins en ressources variables, envisagez d'utiliser des jobs dépendants pour créer une chaîne automatisée de jobs qui utilisent chacun des VM distinctes. Par exemple, séparez les types de VM utilisés pour les opérations à faible demande (comme la préparation des données) et les opérations nécessitant beaucoup de calculs (comme le traitement des données). En utilisant des jobs dépendants pour optimiser la consommation de ressources, vous pouvez réduire les coûts et l'utilisation des quotas.

Avant de commencer

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

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

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

Restrictions

Les jobs dépendants sont soumis aux restrictions suivantes :

  • Une tâche dépendante peut comporter jusqu'à quatre dépendances. Chaque dépendance doit contenir un nom de job unique et l'un des états requis suivants :

    • SUCCEEDED : réussite
    • FAILED : échec
    • FINISHED : réussite ou échec
  • Lorsque vous créez un job dépendant, tous ses jobs de dépendance doivent exister.

  • Une tâche dépendante ne peut pas passer à l'état planifié (SCHEDULED) tant que chaque tâche de dépendance n'a pas atteint l'état requis. Si une tâche de dépendance ne peut pas atteindre l'état requis, la tâche dépendante échoue immédiatement sans être planifiée.

  • Comme toutes les tâches, une tâche dépendante ne peut pas passer à l'état planifié (SCHEDULED) si elle dépasse le délai d'attente maximal dans la file d'attente. Batch applique cette limite pour éviter que vos jobs ne deviennent obsolètes. Par conséquent, si vous pensez que le temps restant nécessaire à l'exécution de l'un des jobs de dépendance risque de dépasser cette limite, envisagez d'effectuer une ou plusieurs des actions suivantes :

    • Si vous n'avez pas encore créé de job de dépendance, essayez de réduire la durée d'exécution prévue du job de dépendance. Par exemple, vous pouvez augmenter le parallélisme de la charge de travail ou limiter la durée d'exécution des tâches et des exécutables dont vous n'avez pas besoin pour réussir.
    • Attendez que la durée d'exécution prévue des jobs de dépendance soit inférieure à la limite avant de créer le job dépendant.

Créer un job dépendant

Vous pouvez créer un job dépendant à l'aide des méthodes suivantes :

Pour spécifier qu'un job est dépendant, incluez le champ dependencies[].items, qui accepte une ou plusieurs dépendances spécifiées sous forme de paires clé-valeur, dans le corps principal du fichier JSON :

"dependencies": [
  {
    "items": {
      "DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
    }
  }
]

Remplacez les éléments suivants :

  • DEPENDENCY_JOB_NAME : nom d'un job de dépendance, qui doit atteindre l'état requis avant que ce job dépendant puisse être planifié.

  • REQUIRED_STATE : état requis pour le job de dépendance correspondant, qui doit être SUCCEEDED, FAILED ou FINISHED.

Par exemple, une tâche dépendante avec trois dépendances peut avoir un fichier de configuration JSON semblable à ce qui suit :

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "dependencies": [
    {
      "items": {
        "DEPENDENCY_JOB_NAME_1": "REQUIRED_STATE_1",
        "DEPENDENCY_JOB_NAME_2": "REQUIRED_STATE_2",
        "DEPENDENCY_JOB_NAME_3": "REQUIRED_STATE_3"
      }
    }
  ]
}

Étapes suivantes