Ce document explique comment créer un job Batch qui envoie Pub/Sub des notifications. Vous pouvez utiliser Pub/Sub pour recevoir des notifications lorsque l'état d'un job ou d'une tâche change, ou lorsqu'un job ou une tâche passe à un état spécifique. Pour en savoir plus, consultez Surveiller les jobs à 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 prérequis 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 Batch (
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 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 Batch (
-
Sauf si vous utilisez la configuration par défaut pour le compte de service du job, assurez-vous qu'il dispose des autorisations nécessaires.
Pour vous assurer que le compte de service du job dispose des autorisations nécessaires pour publier des notifications Pub/Sub, demandez à votre administrateur d'accorder le rôle IAM d'éditeur Pub/Sub (
roles/pubsub.publisher) au compte de service du job sur votre sujet Pub/Sub. - Si vous souhaitez qu'un job publie des notifications dans un sujet Pub/Sub qui
se trouve dans un projet différent de celui du job, l'
agent de service Batch
du projet du job 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 le rôle d'éditeur Pub/Sub (
roles/pubsub.publisher) IAM à l'agent de service Batch du projet du job sur le sujet Pub/Sub.
Créer et exécuter un job qui envoie des notifications
Vous pouvez créer un job Batch qui envoie des notifications Pub/Sub en procédant comme suit :
gcloud
Utilisez Google Cloud CLI pour
créer un job qui
inclut le notifications champ et un ou plusieurs
jobNotification objets
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 du sujet 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 du job ou de toutes ses tâches.Pour les notifications concernant toutes les modifications d'état du job, spécifiez les éléments suivants :
"type": "JOB_STATE_CHANGED"Pour les notifications concernant une modification d'état spécifique du job, spécifiez les éléments suivants :
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"Remplacez
JOB_STATEpar l'un des états de job suivants :QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Pour en savoir plus sur les états des jobs, consultez Cycle de vie des jobs.
Pour les notifications concernant toutes les modifications d'état des tâches, spécifiez les éléments suivants :
"type": "TASK_STATE_CHANGED"Pour les notifications concernant des modifications d'état spécifiques des tâches, spécifiez les éléments suivants :
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"Remplacez
TASK_STATEpar l'un des états de tâche suivants :PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
Pour en savoir plus sur les états des tâches, consultez Cycle de vie des jobs.
Supposons, par exemple, que vous souhaitiez recevoir des notifications concernant toutes les modifications d'état du job 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"
}
}
]
}
API
Utilisez l'API REST 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 du sujet 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 du job ou de toutes ses tâches.Pour les notifications concernant toutes les modifications d'état du job, spécifiez les éléments suivants :
"type": "JOB_STATE_CHANGED"Pour les notifications concernant une modification d'état spécifique du job, spécifiez les éléments suivants :
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"Remplacez
JOB_STATEpar l'un des états de job suivants :QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Pour en savoir plus sur les états des jobs, consultez Cycle de vie des jobs.
Pour les notifications concernant toutes les modifications d'état des tâches, spécifiez les éléments suivants :
"type": "TASK_STATE_CHANGED"Pour les notifications concernant des modifications d'état spécifiques des tâches, spécifiez les éléments suivants :
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"Remplacez
TASK_STATEpar l'un des états de tâche suivants :PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
Pour en savoir plus sur les états des tâches, consultez Cycle de vie des jobs.
Supposons, par exemple, que vous souhaitiez recevoir des notifications concernant toutes les modifications d'état du job 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"
}
}
]
}
Go
Java
Node.js
Python
Une fois le job en cours d'exécution, vous pouvez utiliser ses notifications. Par exemple, si le sujet Pub/Sub de votre job dispose d'un abonnement qui diffuse des notifications en streaming vers BigQuery, vous pouvez analyser les notifications Pub/Sub dans BigQuery.
Étape suivante
- Découvrez comment surveiller l'état des jobs à l'aide des notifications Pub/Sub et de BigQuery.
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'un job, consultez Dépannage.
- Afficher les jobs et les tâches.
- Découvrez d'autres options de création de jobs.