Este documento explica 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 tarefa mudar ou quando um job ou tarefa entrar 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 Começar a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e usuários.
- Crie ou identifique um tópico do Pub/Sub para notificações em lote.
- 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 em lote (
roles/batch.jobsEditor
) no projeto. -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que é a conta de serviço padrão do Compute Engine por padrão. -
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 por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
-
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 de Editor do Pub/Sub (
roles/pubsub.publisher
) no seu 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, o
Agente de serviço em lote
do projeto do job precisa 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 ao agente de serviço do Batch para o projeto do job o Papel de editor do Pub/Sub (
roles/pubsub.publisher
) no tópico do Pub/Sub.
Criar e executar um job que envia notificações
Para criar um job em lote que envie 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
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 do Pub/Sub que você criou ao ativar as notificações do Pub/Sub.ATTRIBUTES
: especifica um ou mais dos atributos a seguir, 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 específica no estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Substitua
JOB_STATE
por um dos seguintes estados de job:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os 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 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 os 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"
}
}
]
}
API
Use 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 do Pub/Sub que você criou ao ativar as notificações do Pub/Sub.ATTRIBUTES
: especifica um ou mais dos atributos a seguir, 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 específica no estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Substitua
JOB_STATE
por um dos seguintes estados de job:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os 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 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 os 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"
}
}
]
}
Go
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 seu job tiver uma assinatura que transmite notificações para o BigQuery, você poderá 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.
- Conferir jobs e tarefas.
- Saiba mais sobre as opções de criação de jobs.