Este documento explica como criar um job em lote que envia Pub/Sub notificações. É possível usar o Pub/Sub para receber notificações quando o estado de um job ou tarefa muda ou quando um job ou tarefa entra em um estado específico. Para mais informações, consulte Monitorar jobs usando notificações.
Antes de começar
- Se você nunca usou o Batch, consulte Introdução ao Batch e ative o serviço concluindo os pré-requisitos para projetos e usuários.
- Crie ou identifique um tópico do Pub/Sub para notificações do Batch.
- Configure uma assinatura para receber e usar as notificações.
Funções exigidas
-
Para receber as permissões necessárias para criar e executar um job que envia notificações, peça ao administrador para conceder a você os seguintes papéis do IAM:
- Editor de jobs do Batch (
roles/batch.jobsEditor) no projeto. - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço do job, que, por padrão, é a conta de serviço padrão do Compute Engine. - Editor do Pub/Sub (
roles/pubsub.editor) no tópico ou projeto do Pub/Sub.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
- Editor de jobs do Batch (
-
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 o papel de Editor do Pub/Sub (
roles/pubsub.publisher) do IAM à conta de serviço do job no tópico do Pub/Sub. - Se você quiser que um job publique notificações em um tópico do Pub/Sub que
esteja em um projeto diferente do job, o
agente de serviço do Batch
para o projeto do job precisará receber permissão para publicar nesse tópico.
Para garantir que o agente de serviço do Batch para o 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 o papel de Editor do Pub/Sub (
roles/pubsub.publisher) do IAM ao agente de serviço do Batch para o projeto do job no tópico do Pub/Sub.
Criar e executar um job que envia notificações
Para criar um job em lote que envia notificações do Pub/Sub, faça o seguinte:
gcloud
Use a Google Cloud CLI para
criar um job que
inclua o campo notifications e um ou mais
jobNotification objetos
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 do Pub/Sub do tópico que você criou ao ativar as notificações do Pub/Sub.ATTRIBUTES: especifique um ou mais dos seguintes atributos, que permitem receber notificações sobre o estado do job ou de todas as tarefas.Para notificações sobre todas as mudanças de estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED"Para notificações sobre uma mudança de estado específica do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"Substitua
JOB_STATEpor um dos seguintes estados de job:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Para mais informações sobre estados de jobs, 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 de estado específicas da tarefa, especifique o seguinte:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"Substitua
TASK_STATEpor um dos seguintes estados de tarefa:PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
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 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"
}
}
]
}
API
Use a API REST para
criar um job que
inclua o campo notifications e um ou mais
jobNotification objetos
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 do Pub/Sub do tópico que você criou ao ativar as notificações do Pub/Sub.ATTRIBUTES: especifique um ou mais dos seguintes atributos, que permitem receber notificações sobre o estado do job ou de todas as tarefas.Para notificações sobre todas as mudanças de estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED"Para notificações sobre uma mudança de estado específica do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"Substitua
JOB_STATEpor um dos seguintes estados de job:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Para mais informações sobre estados de jobs, 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 de estado específicas da tarefa, especifique o seguinte:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"Substitua
TASK_STATEpor um dos seguintes estados de tarefa:PENDINGASSIGNEDRUNNINGSUCCEEDEDFAILED
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 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"
}
}
]
}
Ir
Java
Node.js
Python
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 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
- Saiba mais sobre como monitorar o status do job usando notificações do Pub/Sub e o BigQuery.
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Visualizar jobs e tarefas.
- Saiba mais sobre outras opções de criação de jobs.