En este documento, se explica cómo crear un trabajo por lotes que envíe notificaciones de Pub/Sub. Puedes usar Pub/Sub para recibir notificaciones cuando cambia el estado de un trabajo o una tarea, o cuando estos entran en un estado específico. Para obtener más información, consulta Supervisa trabajos con notificaciones.
Antes de comenzar
- Si nunca usaste Batch, consulta Cómo comenzar 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, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto. -
Usuario de la 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 otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
-
A menos que uses la configuración predeterminada para la cuenta de servicio del trabajo, asegúrate de que tenga los permisos necesarios.
Para garantizar que la cuenta de servicio del trabajo tenga los permisos necesarios para publicar notificaciones de Pub/Sub, pídele a tu administrador que le otorgue a la cuenta de servicio del trabajo el rol de IAM de publicador de Pub/Sub (
roles/pubsub.publisher
) en tu tema de Pub/Sub. - Si deseas que un trabajo publique notificaciones en un tema de Pub/Sub que está en un proyecto diferente al del trabajo, se debe otorgar permiso al agente de servicio por lotes del proyecto del trabajo para que publique en ese tema.
Para garantizar que el agente de servicio de Batch del proyecto del trabajo tenga los permisos necesarios para publicar notificaciones de Pub/Sub en un tema de Pub/Sub en otro proyecto, pídele a tu administrador que le otorgue al agente de servicio de Batch del proyecto del trabajo el rol de IAM de Publicador de Pub/Sub (
roles/pubsub.publisher
) en el tema de Pub/Sub.
Crea y ejecuta una tarea que envíe notificaciones
Para crear un trabajo por lotes que envíe notificaciones de Pub/Sub, haz lo siguiente:
gcloud
Usa Google Cloud CLI para
crear un trabajo que
incluya el campo notifications
y uno o más
objetos jobNotification
en el cuerpo principal del archivo JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto que contiene el tema de Pub/Sub.TOPIC_ID
: Es el ID del tema de Pub/Sub que creaste cuando habilitaste las notificaciones de Pub/Sub.ATTRIBUTES
: Especifica uno o más de los siguientes atributos, que te permiten recibir notificaciones sobre el estado del trabajo o todas sus tareas.Para recibir notificaciones sobre todos los cambios de estado del trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio específico de estado de trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Reemplaza
JOB_STATE
por uno de los siguientes estados de trabajo:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de trabajo, consulta Ciclo de vida de los trabajos.
Para recibir notificaciones sobre todos los cambios de estado de la tarea, especifica lo siguiente:
"type": "TASK_STATE_CHANGED"
Para las notificaciones sobre cambios específicos del estado de la tarea, especifica lo siguiente:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Reemplaza
TASK_STATE
por uno de los siguientes estados de 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 deseas recibir notificaciones sobre todos los cambios de estado del trabajo 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 de REST para
crear una tarea que
incluya el campo notifications
y uno o más
objetos jobNotification
en el cuerpo principal del archivo JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto que contiene el tema de Pub/Sub.TOPIC_ID
: Es el ID del tema de Pub/Sub que creaste cuando habilitaste las notificaciones de Pub/Sub.ATTRIBUTES
: Especifica uno o más de los siguientes atributos, que te permiten recibir notificaciones sobre el estado del trabajo o todas sus tareas.Para recibir notificaciones sobre todos los cambios de estado del trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio específico de estado de trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Reemplaza
JOB_STATE
por uno de los siguientes estados de trabajo:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para obtener más información sobre los estados de trabajo, consulta Ciclo de vida de los trabajos.
Para recibir notificaciones sobre todos los cambios de estado de la tarea, especifica lo siguiente:
"type": "TASK_STATE_CHANGED"
Para las notificaciones sobre cambios específicos del estado de la tarea, especifica lo siguiente:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Reemplaza
TASK_STATE
por uno de los siguientes estados de 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 deseas recibir notificaciones sobre todos los cambios de estado del trabajo 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
Después de que el trabajo comience a ejecutarse, 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.
¿Qué sigue?
- Obtén más información para supervisar el estado de las tareas con notificaciones de Pub/Sub y BigQuery.
- Si tienes problemas para crear o ejecutar una tarea, consulta Solución de problemas.
- Ver trabajos y tareas.
- Obtén más información sobre las opciones de creación de trabajos.