Crear y ejecutar un trabajo que envíe notificaciones de estado de Pub/Sub

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 cambie el estado de un trabajo o una tarea, o cuando un trabajo o una tarea ingresen en un estado específico. Para obtener más información, consulta Supervisa trabajos mediante notificaciones.

Antes de comenzar

Funciones obligatorias

  • A fin de 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:

    Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

    Es posible que también puedas obtener los permisos necesarios a través de funciones personalizadas o, también, otras funciones predefinidas.

  • A menos que uses la configuración predeterminada para 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, pídele a tu administrador que 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, el agente de servicio de Batch del proyecto del trabajo debe tener permiso para publicar en ese tema.

    Para asegurarte de 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 de otro proyecto, pídele a tu administrador que otorgue al agente de servicio de Batch para el proyecto del trabajo el 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

Puedes crear un trabajo por lotes que envíe notificaciones de Pub/Sub si haces lo siguiente:

Usa Google Cloud CLI o 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: Es 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 los trabajos, consulta Ciclo de vida de los trabajos.

    • Para las notificaciones sobre todos los cambios de estado de las tareas, 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 tareas:

      • 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 de un 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"
      }
    }
  ]
}

Una vez que el trabajo comienza a ejecutarse, puedes usar sus notificaciones. Por ejemplo, si el tema de Pub/Sub para tu trabajo tiene una suscripción que transmite notificaciones a BigQuery, puedes analizar las notificaciones de Pub/Sub en BigQuery.

¿Qué sigue?