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 el estado de un trabajo o una tarea cambian o cuando un trabajo o una tarea entra en un estado específico. Para obtener más información, consulta Supervisa trabajos mediante notificaciones.
Antes de comenzar
- Si nunca usaste Batch, revisa Comienza a usar Batch y habilitar Batch completando el requisitos previos para los 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 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 quieres que un trabajo publique notificaciones en un tema de Pub/Sub con
está en un proyecto diferente al del trabajo, el
Agente de servicio por lotes
para el proyecto del trabajo deben tener permiso para publicar en ese tema.
Para garantizar que el agente de servicio de Batch del proyecto del trabajo tenga los permisos necesarios permisos para publicar notificaciones de Pub/Sub en un tema de Pub/Sub en otro proyecto pedirle a tu administrador que otorgue al agente de servicio de Batch para el proyecto del trabajo Rol de IAM de Publicador de Pub/Sub (
roles/pubsub.publisher
) en el tema de Pub/Sub.
Crea y ejecuta un trabajo 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
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 una o más de las siguientes opciones atributos, que te permiten recibir notificaciones sobre el estado del trabajo o todas sus tareas.Para recibir notificaciones sobre todos los cambios de estado de un trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio de estado específico de un trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Reemplaza
JOB_STATE
por uno de los siguientes trabajos. estados: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 recibir notificaciones sobre cambios específicos en el estado de una 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 del trabajo.
Por ejemplo, supongamos que deseas recibir notificaciones sobre todos los estados de un trabajo y cada vez que una tarea falla. Para hacerlo, puedes tener un archivo JSON de Terraform que es 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 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 de un trabajo, especifica lo siguiente:
"type": "JOB_STATE_CHANGED"
Para recibir notificaciones sobre un cambio de estado específico de un 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 recibir notificaciones sobre cambios específicos en el estado de una 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 estados de un trabajo y cada vez que una tarea falla. Para hacerlo, puedes tener un archivo JSON de Terraform que es 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 sobre cómo Supervisar el estado del trabajo con notificaciones de Pub/Sub y BigQuery.
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Visualiza trabajos y tareas.
- Obtén más información sobre las opciones de creación de trabajos.