Este documento explica como criar uma tarefa em lote que envia notificações do Pub/Sub. Pode usar o Pub/Sub para receber notificações quando o estado de uma tarefa ou de um trabalho muda, ou quando uma tarefa ou um trabalho entra num estado específico. Para mais informações, consulte o artigo Monitorize tarefas através de notificações.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
- Crie ou identifique um tópico do Pub/Sub para notificações em lote.
- Configure uma subscrição para receber e usar as notificações.
Funções necessárias
-
Para receber as autorizações de que precisa para criar e executar uma tarefa que envia notificações, peça ao seu administrador que lhe conceda as seguintes funções da IAM:
-
Editor de tarefas de lote (
roles/batch.jobsEditor
) no projeto. -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine. -
Editor do Pub/Sub (
roles/pubsub.editor
) no tópico ou no projeto do Pub/Sub.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Editor de tarefas de lote (
-
A menos que esteja a usar a configuração predefinida para a conta de serviço da tarefa, certifique-se de que tem as autorizações necessárias.
Para garantir que a conta de serviço da tarefa tem as autorizações necessárias para publicar notificações do Pub/Sub, peça ao seu administrador para conceder à conta de serviço da tarefa a função do IAM Publicador do Pub/Sub (
roles/pubsub.publisher
) no seu tópico do Pub/Sub. - Se quiser que uma tarefa publique notificações num tópico do Pub/Sub que esteja num projeto diferente do da tarefa, tem de conceder autorização ao agente do serviço de processamento em lote do projeto da tarefa para publicar nesse tópico.
Para garantir que o agente do serviço Batch para o projeto da tarefa tem as autorizações necessárias para publicar notificações do Pub/Sub num tópico do Pub/Sub noutro projeto, peça ao seu administrador para conceder ao agente do serviço Batch para o projeto da tarefa a função de IAM Publicador do Pub/Sub (
roles/pubsub.publisher
) no tópico do Pub/Sub.
Crie e execute uma tarefa que envia notificações
Pode criar uma tarefa em lote que envia notificações do Pub/Sub fazendo o seguinte:
gcloud
Use a CLI do Google Cloud para criar uma tarefa que inclua o campo notifications
e um ou mais objetos jobNotification
no corpo principal do ficheiro JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Substitua o seguinte:
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 criou quando ativou as notificações do Pub/Sub.ATTRIBUTES
: especifique um ou mais dos seguintes atributos, que lhe permitem receber notificações sobre o estado da tarefa ou de todas as respetivas tarefas.Para receber notificações sobre todas as alterações ao estado da tarefa, especifique o seguinte:
"type": "JOB_STATE_CHANGED"
Para receber notificações sobre uma alteração específica do estado de uma tarefa, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Substitua
JOB_STATE
por um dos seguintes estados do trabalho:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os estados das tarefas, consulte o artigo Ciclo de vida das tarefas.
Para notificações sobre todas as alterações de estado das tarefas, especifique o seguinte:
"type": "TASK_STATE_CHANGED"
Para receber notificações sobre alterações de estado de tarefas específicas, especifique o seguinte:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Substitua
TASK_STATE
por um dos seguintes estados da tarefa:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os estados das tarefas, consulte o artigo Ciclo de vida da tarefa.
Por exemplo, suponha que quer receber notificações sobre todas as alterações ao estado do trabalho e sempre que uma tarefa falha. Para tal, pode ter um ficheiro 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 uma tarefa que inclua o campo notifications
e um ou mais objetos jobNotification
no corpo principal do ficheiro JSON:
{
...
"notifications": [
{
"pubsubTopic": "projects/PROJECT_ID/topics/TOPIC_ID",
"message": {
ATTRIBUTES
}
}
]
...
}
Substitua o seguinte:
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 criou quando ativou as notificações do Pub/Sub.ATTRIBUTES
: especifique um ou mais dos seguintes atributos, que lhe permitem receber notificações sobre o estado da tarefa ou de todas as respetivas tarefas.Para receber notificações sobre todas as alterações ao estado da tarefa, especifique o seguinte:
"type": "JOB_STATE_CHANGED"
Para receber notificações sobre uma alteração específica do estado de uma tarefa, especifique o seguinte:
"type": "JOB_STATE_CHANGED", "newJobState": "JOB_STATE"
Substitua
JOB_STATE
por um dos seguintes estados do trabalho:QUEUED
SCHEDULED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os estados das tarefas, consulte o artigo Ciclo de vida das tarefas.
Para notificações sobre todas as alterações de estado das tarefas, especifique o seguinte:
"type": "TASK_STATE_CHANGED"
Para receber notificações sobre alterações de estado de tarefas específicas, especifique o seguinte:
"type": "TASK_STATE_CHANGED", "newTaskState": "TASK_STATE"
Substitua
TASK_STATE
por um dos seguintes estados da tarefa:PENDING
ASSIGNED
RUNNING
SUCCEEDED
FAILED
Para mais informações sobre os estados das tarefas, consulte o artigo Ciclo de vida da tarefa.
Por exemplo, suponha que quer receber notificações sobre todas as alterações ao estado do trabalho e sempre que uma tarefa falha. Para tal, pode ter um ficheiro 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 de a tarefa começar a ser executada, pode usar as respetivas notificações. Por exemplo, se o tópico do Pub/Sub para a sua tarefa tiver uma subscrição que transmita notificações para o BigQuery, pode analisar as notificações do Pub/Sub no BigQuery.
O que se segue?
- Saiba como monitorizar o estado das tarefas através de notificações do Pub/Sub e do BigQuery.
- Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
- Ver empregos e tarefas.
- Saiba mais sobre as opções de criação de tarefas.