Ce document explique comment créer une tâche par lot qui envoie des notifications Pub/Sub. Vous pouvez utiliser Pub/Sub pour recevoir des notifications lorsqu'un état de tâche ou de job change, ou lorsqu'un état spécifique est atteint. Pour en savoir plus, consultez la section Surveiller des tâches à l'aide de notifications.
Avant de commencer
- 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.
- Créez ou identifiez un sujet Pub/Sub pour les notifications Batch.
- Configurez un abonnement pour recevoir et utiliser les notifications.
Rôles requis
-
Pour obtenir les autorisations nécessaires pour créer et exécuter un job qui envoie des notifications, demandez à votre administrateur de vous accorder les rôles IAM suivants:
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet. -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui est par défaut le compte de service Compute Engine par défaut. -
Éditeur Pub/Sub (
roles/pubsub.editor
) sur le sujet ou le projet Pub/Sub.
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.
-
Éditeur de tâches par lot (
-
Sauf si vous utilisez la configuration par défaut pour le compte de service de la tâche, 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 sur un sujet Pub/Sub situé dans un projet différent de celui de la tâche, l'agent de service de traitement par lot du projet de la tâche doit être autorisé à publier sur ce sujet.
Pour vous assurer que l'agent de service Batch du projet de l'ordre dispose des autorisations nécessaires pour publier des notifications Pub/Sub sur un sujet Pub/Sub dans un autre projet, demandez à votre administrateur d'accorder à l'agent de service Batch du projet de l'ordre le rôle IAM Éditeur Pub/Sub (
roles/pubsub.publisher
) sur le sujet Pub/Sub.
Créer et exécuter une tâche qui envoie des notifications
Pour créer une tâche par lot qui envoie des notifications Pub/Sub, procédez comme suit:
gcloud
Utilisez la Google Cloud CLI pour créer un job qui inclut 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 toutes ses tâches.Pour recevoir des notifications sur tous les changements d'état des tâches, spécifiez les éléments suivants:
"type": "JOB_STATE_CHANGED"
Pour recevoir des notifications sur un changement d'état de tâche spécifique, 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 recevoir des notifications sur tous les changements d'état des tâches, spécifiez les éléments suivants:
"type": "TASK_STATE_CHANGED"
Pour recevoir des notifications sur des modifications d'état de tâche spécifiques, 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 de la tâche et chaque fois qu'une tâche échoue. Pour ce faire, vous pouvez utiliser 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"
}
}
]
}
API
Utilisez l'API REST pour créer une tâche qui inclut 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 toutes ses tâches.Pour recevoir des notifications sur tous les changements d'état des tâches, spécifiez les éléments suivants:
"type": "JOB_STATE_CHANGED"
Pour recevoir des notifications sur un changement d'état de tâche spécifique, 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 recevoir des notifications sur tous les changements d'état des tâches, spécifiez les éléments suivants:
"type": "TASK_STATE_CHANGED"
Pour recevoir des notifications sur des modifications d'état de tâche spécifiques, 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 de la tâche et chaque fois qu'une tâche échoue. Pour ce faire, vous pouvez utiliser 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"
}
}
]
}
Go
Java
Node.js
Python
Une fois la tâche lancée, vous pouvez utiliser ses notifications. Par exemple, si le sujet Pub/Sub de votre tâche dispose d'un abonnement qui diffuse des notifications dans BigQuery, vous pouvez analyser les notifications Pub/Sub dans BigQuery.
Étape suivante
- Découvrez comment surveiller l'état des tâches à l'aide des notifications Pub/Sub et de BigQuery.
- Si vous rencontrez des difficultés pour créer ou exécuter une tâche, consultez la section Dépannage.
- Afficher les jobs et les tâches
- Découvrez d'autres options de création de tâches.