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, leia Começar a usar o 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 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 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 usando papéis personalizados ou 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 de Editor do Pub/Sub (
roles/pubsub.publisher) do IAM 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 do Batch
do projeto do job precisa ter 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 do IAM de Editor do Pub/Sub (
roles/pubsub.publisher) no tópico do Pub/Sub.
Criar e executar um job que envia notificações
É possível criar um job em lote que envie notificações do Pub/Sub fazendo 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: especifique um ou mais dos seguintes atributos, que permitem receber notificações sobre o estado do job ou de todas as tarefas dele.Para receber notificações sobre todas as mudanças de estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED"Para receber 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 trabalho:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Para mais informações sobre estados de jobs, consulte Ciclo de vida do job.
Para receber notificações sobre todas as mudanças de estado das tarefas, especifique o seguinte:
"type": "TASK_STATE_CHANGED"Para receber notificações sobre mudanças específicas no estado 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
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: especifique um ou mais dos seguintes atributos, que permitem receber notificações sobre o estado do job ou de todas as tarefas dele.Para receber notificações sobre todas as mudanças de estado do job, especifique o seguinte:
"type": "JOB_STATE_CHANGED"Para receber 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 trabalho:QUEUEDSCHEDULEDRUNNINGSUCCEEDEDFAILED
Para mais informações sobre estados de jobs, consulte Ciclo de vida do job.
Para receber notificações sobre todas as mudanças de estado das tarefas, especifique o seguinte:
"type": "TASK_STATE_CHANGED"Para receber notificações sobre mudanças específicas no estado 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"
}
}
]
}
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.
- Ver jobs e tarefas.
- Saiba mais sobre outras opções de criação de jobs.