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 el estado de un trabajo o una tarea cambia, 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

Roles obligatorios

  • A fin de obtener los permisos que necesitas para crear y ejecutar un trabajo que envía notificaciones, sigue estos pasos: solicita a tu administrador que te otorgue el los siguientes roles de IAM:

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

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  • A menos que uses la configuración predeterminada para la cuenta de servicio del trabajo asegurarse de que cuenta con los permisos necesarios.

    Para asegurarte de que la cuenta de servicio del trabajo tenga permisos para publicar notificaciones de Pub/Sub, solicita a tu administrador que otorgue la cuenta de servicio del trabajo 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

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

Usa Google Cloud CLI o la API de REST 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 del tema. que creaste cuando habilitar 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 los trabajos, consulta Ciclo de vida del trabajo.

    • 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 valores: 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 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"
      }
    }
  ]
}

Una vez que el trabajo comienza a ejecutarse, puedes 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?