En este documento se explica cómo crear un trabajo de Batch que envíe notificaciones de Pub/Sub. Puedes usar Pub/Sub para recibir notificaciones cuando cambie el estado de un trabajo o una tarea, o cuando un trabajo o una tarea entre en un estado específico. Para obtener más información, consulta Monitorizar trabajos mediante notificaciones.
Antes de empezar
- Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
- Crea o identifica un tema de Pub/Sub para las notificaciones de Batch.
- Configura una suscripción para recibir y usar las notificaciones.
Roles obligatorios
-
Para obtener los permisos que necesitas para crear y ejecutar un trabajo que envíe notificaciones, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) del proyecto. -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine. -
Editor de Pub/Sub (
roles/pubsub.editor
) en el tema o proyecto de Pub/Sub.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Editor de trabajos por lotes (
-
A menos que uses la configuración predeterminada de la cuenta de servicio del trabajo, asegúrate de que tenga los permisos necesarios.
Para asegurarte de que la cuenta de servicio del trabajo tenga los permisos necesarios para publicar notificaciones de Pub/Sub, pide a tu administrador que le conceda el rol de gestión de identidades y accesos Publicador de Pub/Sub (
roles/pubsub.publisher
) en tu tema de Pub/Sub. - Si quieres que una tarea publique notificaciones en un tema de Pub/Sub que esté en un proyecto diferente al de la tarea, debes conceder permiso al agente de servicio de Batch del proyecto de la tarea para publicar en ese tema.
Para asegurarte de que el agente de servicio de Batch del proyecto de la tarea tenga los permisos necesarios para publicar notificaciones de Pub/Sub en un tema de Pub/Sub de otro proyecto, pide a tu administrador que conceda al agente de servicio de Batch del proyecto de la tarea el rol de gestión de identidades y accesos Editor de Pub/Sub (
roles/pubsub.publisher
) en el tema de Pub/Sub.
Crear y ejecutar un trabajo que envíe notificaciones
Para crear un trabajo de Batch que envíe notificaciones de Pub/Sub, sigue estos pasos:
gcloud
Usa la CLI de Google Cloud para crear un trabajo que incluya el campo notifications
y uno o varios objetos jobNotification
en el cuerpo principal del archivo JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el tema de Pub/Sub.TOPIC_ID
: el ID del tema de Pub/Sub que creaste cuando habilitaste las notificaciones de Pub/Sub.ATTRIBUTES
: especifica uno o varios de los siguientes atributos, que te permiten recibir notificaciones sobre el estado del trabajo o de todas sus tareas.Para recibir notificaciones sobre todos los cambios de estado de los trabajos, especifique lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio de estado de un trabajo concreto, especifica lo siguiente:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Sustituye
JOB_STATE
por uno de los siguientes estados de la tarea:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de los trabajos, consulta el artículo Ciclo de vida de los trabajos.
Para recibir notificaciones sobre todos los cambios de estado de las tareas, especifica lo siguiente:
"type": "TASK_STATE_CHANGED"
Para recibir notificaciones sobre cambios de estado de tareas concretas, especifica lo siguiente:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Sustituye
TASK_STATE
por uno de los siguientes estados de la tarea:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de las tareas, consulta Ciclo de vida de los trabajos.
Por ejemplo, supongamos que quiere recibir notificaciones sobre todos los cambios de estado de las tareas y cada vez que falle una tarea. Para ello, puedes tener un archivo de configuración JSON similar al siguiente:
{
"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
Usa la API REST para crear un trabajo que incluya el campo notifications
y uno o varios jobNotification
objetos en el cuerpo principal del archivo JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el tema de Pub/Sub.TOPIC_ID
: el ID del tema de Pub/Sub que creaste cuando habilitaste las notificaciones de Pub/Sub.ATTRIBUTES
: especifica uno o varios de los siguientes atributos, que te permiten recibir notificaciones sobre el estado del trabajo o de todas sus tareas.Para recibir notificaciones sobre todos los cambios de estado de los trabajos, especifique lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio de estado de un trabajo concreto, especifica lo siguiente:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Sustituye
JOB_STATE
por uno de los siguientes estados de la tarea:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de los trabajos, consulta el artículo Ciclo de vida de los trabajos.
Para recibir notificaciones sobre todos los cambios de estado de las tareas, especifica lo siguiente:
"type": "TASK_STATE_CHANGED"
Para recibir notificaciones sobre cambios de estado de tareas concretas, especifica lo siguiente:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Sustituye
TASK_STATE
por uno de los siguientes estados de la tarea:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de las tareas, consulta Ciclo de vida de los trabajos.
Por ejemplo, supongamos que quiere recibir notificaciones sobre todos los cambios de estado de las tareas y cada vez que falle una tarea. Para ello, puedes tener un archivo de configuración JSON similar al siguiente:
{
"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
Una vez que el trabajo se haya iniciado, podrás usar sus notificaciones. Por ejemplo, si el tema de Pub/Sub de tu trabajo tiene una suscripción que transmite notificaciones a BigQuery, puedes analizar las notificaciones de Pub/Sub en BigQuery.
Siguientes pasos
- Consulta más información sobre cómo monitorizar el estado de los trabajos con notificaciones de Pub/Sub y BigQuery.
- Si tienes problemas para crear o ejecutar un trabajo, consulta la sección Solución de problemas.
- Ver trabajos y tareas.
- Consulta más información sobre las opciones de creación de trabajos.