Créer et exécuter un job qui envoie des notifications d'état Pub/Sub

Ce document explique comment créer un job par lot qui envoie des notifications Pub/Sub. Vous pouvez utiliser Pub/Sub pour recevoir des notifications lorsqu'une tâche ou une tâche change d'état, ou lorsqu'elle passe dans un état spécifique. Pour en savoir plus, consultez la section Surveiller les tâches à l'aide des notifications.

Avant de commencer

Rôles requis

  • Pour obtenir les autorisations nécessaires pour créer et exécuter une tâche envoyant des notifications, demandez à votre administrateur de vous attribuer les rôles IAM suivants:

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

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

  • À moins que vous n'utilisiez la configuration par défaut du compte de service du job, assurez-vous qu'il dispose des autorisations nécessaires.

    Pour vous assurer que le compte de service de la tâche dispose des autorisations nécessaires pour publier des notifications Pub/Sub, demandez à votre administrateur d'accorder au compte de service de la tâche le rôle IAM Éditeur Pub/Sub (roles/pubsub.publisher) sur votre sujet Pub/Sub.

  • Si vous souhaitez qu'une tâche publie des notifications dans un sujet Pub/Sub qui se trouve dans un projet différent de celui de la tâche, l'agent de service Batch du projet associé doit être autorisé à publier dans ce sujet.

    Pour vous assurer que l'agent de service Batch du projet du job dispose des autorisations nécessaires pour publier des notifications Pub/Sub dans un sujet Pub/Sub d'un autre projet, demandez à votre administrateur d'accorder à l'agent de service Batch pour le projet du job le rôle IAM Éditeur Pub/Sub (roles/pubsub.publisher) sur le sujet Pub/Sub.

Créer et exécuter un job qui envoie des notifications

Pour créer une tâche par lot qui envoie des notifications Pub/Sub, procédez comme suit:

Utilisez Google Cloud CLI ou l'API REST pour créer une tâche incluant le champ notifications et un ou plusieurs objets jobNotification dans le corps principal du fichier JSON:

  "notifications": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        ATTRIBUTES
      }
    }
  ]

Remplacez les éléments suivants :

  • PROJECT_ID: ID du projet contenant le sujet Pub/Sub.
  • TOPIC_ID: ID du sujet Pub/Sub que vous avez créé lorsque vous avez activé les notifications Pub/Sub.
  • ATTRIBUTES: spécifiez un ou plusieurs des attributs suivants, qui vous permettent chacun de recevoir des notifications sur l'état de la tâche ou de l'ensemble de ses tâches.

    • Pour recevoir des notifications concernant tous les changements d'état des tâches, spécifiez les éléments suivants:

      "type": "JOB_STATE_CHANGED"
      
    • Pour les notifications concernant un changement d'état spécifique d'une tâche, spécifiez les éléments suivants:

      "type": "JOB_STATE_CHANGED",
      "newJobState": "JOB_STATE"
      

      Remplacez JOB_STATE par l'un des états de tâche suivants:

      • QUEUED
      • SCHEDULED
      • RUNNING
      • SUCCEEDED
      • FAILED

      Pour en savoir plus sur les états des tâches, consultez la section Cycle de vie des tâches.

    • Pour les notifications concernant tous les changements d'état des tâches, spécifiez les éléments suivants:

      "type": "TASK_STATE_CHANGED"
      
    • Pour les notifications concernant des changements d'état spécifiques d'une tâche, spécifiez les éléments suivants:

      "type": "TASK_STATE_CHANGED",
      "newTaskState": "TASK_STATE"
      

      Remplacez TASK_STATE par l'un des états de tâche suivants:

      • PENDING
      • ASSIGNED
      • RUNNING
      • SUCCEEDED
      • FAILED

      Pour en savoir plus sur les états des tâches, consultez la section Cycle de vie des tâches.

Par exemple, supposons que vous souhaitiez recevoir des notifications sur tous les changements d'état d'une tâche et chaque fois qu'une tâche échoue. Pour ce faire, vous pouvez disposer d'un fichier de configuration JSON semblable à celui-ci:

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3,
    }
  ],
  "logsPolicy": {
      "destination": "CLOUD_LOGGING"
  },
  "notifications": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        "type": "JOB_STATE_CHANGED"
      }
    },
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        "type": "TASK_STATE_CHANGED",
        "newTaskState": "FAILED"
      }
    }
  ]
}

Une fois la tâche démarrée, vous pouvez utiliser ses notifications. Par exemple, si le sujet Pub/Sub de votre tâche comporte un abonnement qui diffuse les notifications vers BigQuery, vous pouvez analyser les notifications Pub/Sub dans BigQuery.

Étapes suivantes