Criar e executar um job que envie notificações de status do Pub/Sub

Neste documento, explicamos como criar um job em lote que envia notificações do Pub/Sub. É possível usar o Pub/Sub para receber notificações quando o estado de um job ou de uma tarefa for alterado ou quando um job ou uma tarefa entrar em um estado específico. Para mais informações, consulte Monitorar jobs usando notificações.

Antes de começar

Funções exigidas

  • Para receber as permissões necessárias para criar e executar um job que envie notificações, peça ao administrador para conceder a você os seguintes papéis do IAM:

    Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

    Também é possível receber as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

  • A menos que você esteja usando a configuração padrão para a conta de serviço do job, verifique se ela tem as permissões necessárias.

    Para garantir que a conta de serviço do job tenha as permissões necessárias para publicar notificações do Pub/Sub, peça ao administrador para conceder à conta de serviço do job o papel do IAM Editor do Pub/Sub (roles/pubsub.publisher) no tópico do Pub/Sub.

  • Se você quiser que um job publique notificações em um tópico do Pub/Sub que está em um projeto diferente do job, o agente de serviço em lote do projeto do job precisará receber permissão para publicar nesse tópico.

    Para garantir que o agente de serviço do Batch no projeto do job tenha as permissões necessárias para publicar notificações do Pub/Sub em um tópico do Pub/Sub em outro projeto, peça ao administrador para conceder ao agente de serviço do Batch o papel de IAM Editor do Pub/Sub (roles/pubsub.publisher) no tópico do Pub/Sub.

Criar e executar um job que envie notificações

É possível criar um job em lote que envie notificações do Pub/Sub fazendo o seguinte:

Use a Google Cloud CLI ou a API REST para criar um job que inclua o campo notifications e um ou mais objetos jobNotification no corpo principal do arquivo JSON:

  "notifications": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "message": {
        ATTRIBUTES
      }
    }
  ]

Substitua:

  • PROJECT_ID: o ID do projeto que contém o tópico do Pub/Sub.
  • TOPIC_ID: o ID do tópico Pub/Sub do tópico que você criou quando ativou as notificações do Pub/Sub.
  • ATTRIBUTES: especifique um ou mais dos seguintes atributos, cada um permitindo que você receba notificações sobre o estado do job ou todas as tarefas dele.

    • Para notificações sobre todas as alterações no estado do job, especifique o seguinte:

      "type": "JOB_STATE_CHANGED"
      
    • Para notificações sobre uma alteração específica do estado do job, especifique o seguinte:

      "type": "JOB_STATE_CHANGED",
      "newJobState": "JOB_STATE"
      

      Substitua JOB_STATE por um dos seguintes estados do job:

      • QUEUED
      • SCHEDULED
      • RUNNING
      • SUCCEEDED
      • FAILED

      Para mais informações sobre estados do job, consulte Ciclo de vida do job.

    • Para notificações sobre todas as mudanças de estado da tarefa, especifique o seguinte:

      "type": "TASK_STATE_CHANGED"
      
    • Para notificações sobre mudanças específicas no estado da tarefa, especifique o seguinte:

      "type": "TASK_STATE_CHANGED",
      "newTaskState": "TASK_STATE"
      

      Substitua TASK_STATE por um dos seguintes estados de tarefa:

      • PENDING
      • ASSIGNED
      • RUNNING
      • SUCCEEDED
      • FAILED

      Para mais informações sobre estados de tarefas, consulte Ciclo de vida do job.

Por exemplo, suponha que você queira receber notificações sobre todas as mudanças de estado do job e sempre que uma tarefa falhar. Para fazer isso, você pode ter um arquivo de configuração JSON semelhante ao seguinte:

{
  "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"
      }
    }
  ]
}

Depois que o job começar a ser executado, você poderá usar as notificações dele. Por exemplo, se o tópico do Pub/Sub do seu job tiver uma assinatura que transmite notificações para o BigQuery, será possível analisar as notificações do Pub/Sub no BigQuery.

A seguir