Questo documento spiega come creare un job Batch che invia notifiche Pub/Sub. Puoi utilizzare Pub/Sub per ricevere notifiche quando lo stato di un job o di un'attività cambia o quando un job o un'attività entra in uno stato specifico. Per saperne di più, consulta la pagina Monitorare i job utilizzando le notifiche.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a Batch e attiva Batch completando i prerequisiti per progetti e utenti.
- Crea o identifica un argomento Pub/Sub per le notifiche Batch.
- Configura un abbonamento per ricevere e utilizzare le notifiche.
Ruoli obbligatori
-
Per ottenere le autorizzazioni necessarie per creare ed eseguire un job che invia notifiche, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Editor di job batch (
roles/batch.jobsEditor
) sul progetto. -
Utente service account (
roles/iam.serviceAccountUser
) sul service account del job, che per impostazione predefinita è il service account Compute Engine predefinito. -
Editor Pub/Sub (
roles/pubsub.editor
) nell'argomento o nel progetto Pub/Sub.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Editor di job batch (
-
A meno che tu non utilizzi la configurazione predefinita per il service account del job, assicurati che disponga delle autorizzazioni necessarie.
Per assicurarti che il account di servizio del job disponga delle autorizzazioni necessarie per pubblicare le notifiche Pub/Sub, chiedi all'amministratore di concedere al account di servizio del job il ruolo IAM Publisher Pub/Sub (
roles/pubsub.publisher
) nell'argomento Pub/Sub. - Se vuoi che un job pubblichi notifiche in un argomento Pub/Sub che si trova in un progetto diverso da quello del job, all'agente di servizio Batch per il progetto del job deve essere concessa l'autorizzazione per la pubblicazione nell'argomento.
Per assicurarti che l'agente di servizio Batch per il progetto del job disponga delle autorizzazioni necessarie per pubblicare notifiche Pub/Sub in un argomento Pub/Sub in un altro progetto, chiedi all'amministratore di concedere all'agente di servizio Batch per il progetto del job il ruolo IAM Publisher Pub/Sub (
roles/pubsub.publisher
) nell'argomento Pub/Sub.
Crea ed esegui un job che invia notifiche
Puoi creare un job Batch che invia notifiche Pub/Sub nel seguente modo:
gcloud
Utilizza Google Cloud CLI per
creare un job che
includa il campo notifications
e uno o più
oggetti jobNotification
nel corpo principale del file JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto che contiene l'argomento Pub/Sub.TOPIC_ID
: l'ID argomento Pub/Sub dell'argomento che hai creato quando hai attivato le notifiche Pub/Sub.ATTRIBUTES
: specifica uno o più dei seguenti attributi, ognuno dei quali ti consente di ricevere notifiche sullo stato del lavoro o di tutte le sue attività.Per le notifiche relative a tutte le modifiche dello stato del job, specifica quanto segue:
"type": "JOB_STATE_CHANGED"
Per le notifiche relative a una modifica specifica dello stato del job, specifica quanto segue:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Sostituisci
JOB_STATE
con uno dei seguenti stati del job:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Per saperne di più sugli stati dei job, consulta la sezione Ciclo di vita dei job.
Per le notifiche relative a tutte le modifiche dello stato delle attività, specifica quanto segue:
"type": "TASK_STATE_CHANGED"
Per le notifiche relative a modifiche specifiche dello stato dell'attività, specifica quanto segue:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Sostituisci
TASK_STATE
con uno dei seguenti stati dell'attività:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Per saperne di più sugli stati dell'attività, consulta la sezione Ciclo di vita del job.
Ad esempio, supponiamo di voler ricevere notifiche su tutte le modifiche dello stato del job e ogni volta che un'attività non va a buon fine. A questo scopo, puoi avere un file di configurazione JSON simile al seguente:
{
"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
Utilizza l'API REST per
creare un job che
includa il campo notifications
e uno o più
oggetti jobNotification
nel corpo principale del file JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto che contiene l'argomento Pub/Sub.TOPIC_ID
: l'ID argomento Pub/Sub dell'argomento che hai creato quando hai attivato le notifiche Pub/Sub.ATTRIBUTES
: specifica uno o più dei seguenti attributi, ognuno dei quali ti consente di ricevere notifiche sullo stato del lavoro o di tutte le sue attività.Per le notifiche relative a tutte le modifiche dello stato del job, specifica quanto segue:
"type": "JOB_STATE_CHANGED"
Per le notifiche relative a una modifica specifica dello stato del job, specifica quanto segue:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Sostituisci
JOB_STATE
con uno dei seguenti stati del job:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Per saperne di più sugli stati dei job, consulta la sezione Ciclo di vita dei job.
Per le notifiche relative a tutte le modifiche dello stato delle attività, specifica quanto segue:
"type": "TASK_STATE_CHANGED"
Per le notifiche relative a modifiche specifiche dello stato dell'attività, specifica quanto segue:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Sostituisci
TASK_STATE
con uno dei seguenti stati dell'attività:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Per saperne di più sugli stati dell'attività, consulta la sezione Ciclo di vita del job.
Ad esempio, supponiamo di voler ricevere notifiche su tutte le modifiche dello stato del job e ogni volta che un'attività non va a buon fine. A questo scopo, puoi avere un file di configurazione JSON simile al seguente:
{
"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"
}
}
]
}
Vai
Java
Node.js
Python
Una volta avviata l'esecuzione del job, puoi utilizzare le relative notifiche. Ad esempio, se l'argomento Pub/Sub per il tuo job ha un abbonamento che trasmette le notifiche a BigQuery, puoi analizzare le notifiche Pub/Sub in BigQuery.
Passaggi successivi
- Scopri di più su come monitorare lo stato dei job utilizzando le notifiche Pub/Sub e BigQuery.
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizzare lavori e attività.
- Scopri di più sulle opzioni di creazione dei job.