Os processadores do Cloud Tasks podem ser executados em qualquer ponto final HTTP com um endereço IP externo, como o GKE, o Compute Engine ou até mesmo um servidor Web no local. As suas tarefas podem ser executadas em qualquer um destes serviços de forma fiável e configurável.
Esta página demonstra como criar programaticamente tarefas de destino HTTP básicas e colocá-las em filas do Cloud Tasks. O início rápido demonstra como fazê-lo através da CLI Google Cloud.
Para tarefas que têm destinos HTTP (em oposição a destinos explícitos do App Engine, que são menos comuns), existem duas formas de criar tarefas:
Método
CreateTask
:tem de criar explicitamente um objeto de tarefa. Use este método se as tarefas na fila tiverem configurações de encaminhamento diferentes. Neste caso, especifica o encaminhamento ao nível da tarefa e não pode usar o encaminhamento ao nível da fila. Esta abordagem usa o métodoCreateTask
.Método
BufferTask
: use este método se a sua fila estiver configurada para armazenar tarefas em buffer antes de um serviço. A fila tem de ter encaminhamento ao nível da fila. Esta abordagem usa o métodoBufferTask
.
Crie uma tarefa através do método CreateTask
Esta secção aborda a criação de uma tarefa através da construção do objeto de tarefa. Usar o método CreateTask
.
Quando cria uma tarefa através do método CreateTask
, cria e define explicitamente o objeto de tarefa. Tem de especificar o serviço e o controlador que processam a tarefa.
Opcionalmente, pode transmitir dados específicos da tarefa ao controlador. Também pode ajustar a configuração da tarefa, como agendar uma hora no futuro em que deve ser executada ou limitar o número de vezes que quer que a tarefa seja repetida se falhar (consulte Configuração avançada).
Os exemplos seguintes chamam o método CreateTask
para criar uma tarefa através das bibliotecas cliente do Cloud Tasks.
C#
Ir
Java
Tenha em atenção o ficheiro pom.xml
:
Node.js
Tenha em atenção o ficheiro package.json
:
PHP
Tenha em atenção o ficheiro composer.json
:
Python
Tenha em atenção o ficheiro requirements.txt
:
Ruby
Crie uma tarefa através do método BufferTask
Esta secção aborda a criação de uma tarefa através do envio de um pedido HTTP. O método que usa chama-se BufferTask
.
Limitações
O método BufferTask
está sujeito às seguintes limitações:
Bibliotecas cliente: o método
BufferTask
não é suportado em bibliotecas cliente.API RPC: o método
BufferTask
não é suportado na API RPC.Encaminhamento ao nível da tarefa: este método não suporta o encaminhamento ao nível da tarefa. Uma vez que não existe nenhum local para adicionar informações de encaminhamento quando cria uma tarefa desta forma, tem de usar o encaminhamento ao nível da fila (caso contrário, a tarefa não tem informações de encaminhamento). Se a sua fila ainda não usar o encaminhamento ao nível da fila, consulte o artigo Configure o encaminhamento ao nível da fila para tarefas HTTP.
Chame o método BufferTask
Os exemplos seguintes mostram como criar uma tarefa enviando um pedido HTTP para o ponto final da POST
API Cloud Tasksbuffer
.
curl
O fragmento do código seguinte mostra um exemplo de criação de tarefas com o método BufferTask
usando curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Substitua o seguinte:
HTTP_METHOD
: o método HTTP para o seu pedido; por exemplo,GET
ouPOST
.PROJECT_ID
: o ID do seu projeto Google Cloud . Pode obter esta informação executando o seguinte no terminal:gcloud config get-value project
LOCATION
: a localização da sua fila.QUEUE_ID
: o ID da sua fila.
Python
Configure uma conta de serviço para a autenticação do controlador de destino HTTP
O Cloud Tasks pode chamar controladores de destino HTTP que requerem autenticação se tiver uma conta de serviço com as credenciais adequadas para aceder ao controlador.
Pode usar a sua conta de serviço atual se lhe conceder as funções adequadas. Estas instruções abrangem a criação de uma nova conta de serviço especificamente para esta função. A conta de serviço existente ou nova usada para a autenticação do Cloud Tasks tem de estar no mesmo projeto que as suas filas do Cloud Tasks.
Na Google Cloud consola, aceda à página Contas de serviço.
Se necessário, selecione o projeto adequado.
Clique em Criar conta de serviço.
Na secção Detalhes da conta de serviço, atribua um nome à conta. A consola cria um nome de conta de email relacionado para a conta. É assim que faz referência à conta. Também pode adicionar uma descrição da finalidade da conta. Clique em Criar e continuar.
Na secção Conceda a esta conta de serviço acesso ao projeto, clique em Selecionar uma função. Pesquise e selecione Cloud Tasks Enqueuer. Esta função concede à conta de serviço autorização para adicionar tarefas à fila.
Clique em + Adicionar outra função.
Clique em Selecionar uma função. Pesquise e selecione Utilizador da conta de serviço. Esta função permite que a conta de serviço autorize a fila a criar tokens em seu nome através das credenciais da conta de serviço.
Se o seu controlador fizer parte do Google Cloud, conceda à conta de serviço a função associada ao acesso ao serviço onde o seu controlador está a ser executado. Cada serviço dentro do Google Cloud requer uma função diferente. Por exemplo, para aceder a um controlador no Cloud Run, conceda a função Cloud Run Invoker. Pode usar a conta de serviço que acabou de criar ou qualquer outra conta de serviço no seu projeto.
Clique em Concluído para terminar de criar a conta de serviço.
O Cloud Tasks tem de ter uma conta de serviço própria com a função
Cloud Tasks Service Agent
concedida. Isto permite gerar tokens de cabeçalho
com base nas credenciais associadas à conta de serviço do Cloud Tasks
para autenticação com o destino do controlador. A conta de serviço do Cloud Tasks com esta função concedida é criada automaticamente quando ativa a API Cloud Tasks, a menos que a tenha ativado antes de 19 de março de 2019. Nesse caso, tem de adicionar a função manualmente.
Use tarefas de destino HTTP com tokens de autenticação
Para autenticar entre o Cloud Tasks e um controlador de destino HTTP que requer essa autenticação, o Cloud Tasks cria um token de cabeçalho. Este token baseia-se nas credenciais da
conta de serviço Cloud Tasks Enqueuer
, identificada pelo respetivo endereço de email. A conta de serviço usada para autenticação tem de fazer parte do mesmo projeto onde reside a fila do Cloud Tasks. O pedido, com o token do cabeçalho, é enviado da fila para o controlador por HTTPS. Pode usar um token de ID ou um token de acesso.
Geralmente, os tokens de ID devem ser usados para qualquer controlador em execução no Google Cloud, por exemplo, em funções do Cloud Run ou no Cloud Run. A principal exceção é para as APIs Google alojadas em *.googleapis.com
: estas APIs esperam um token de acesso.
Pode configurar a autenticação ao nível da fila ou da tarefa. Para configurar a autenticação ao nível da fila, consulte o artigo Criar filas do Cloud Tasks. Se a autenticação estiver configurada ao nível da fila, esta configuração substitui a configuração ao nível da tarefa. Para configurar a autenticação ao nível da tarefa, especifique um token de ID (OIDC) ou um token de acesso (OAuth) na própria tarefa.
CreateTask
método
Os exemplos seguintes usam o método CreateTask
com as bibliotecas cliente do Cloud Tasks para criar uma tarefa que também inclui a criação de um token de cabeçalho. Os tokens de ID são usados nos exemplos.
Para usar uma chave de acesso, substitua o parâmetro OIDC pelo parâmetro OAuth adequado ao idioma na criação do pedido.
Ir
Java
Tenha em atenção o ficheiro pom.xml
:
Node.js
Tenha em atenção o ficheiro package.json
:
Python
Tenha em atenção o ficheiro requirements.txt
:
BufferTask
método
Os exemplos seguintes usam as credenciais padrão da aplicação para autenticar quando usam o método BufferTask
para criar uma tarefa.
curl
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Substitua o seguinte:
HTTP_METHOD
: o método HTTP para o seu pedido; por exemplo,GET
ouPOST
.PROJECT_ID
: o ID do seu projeto Google Cloud . Pode obter esta informação executando o seguinte no terminal:gcloud config get-value project
LOCATION
: a localização da sua fila.QUEUE_ID
: o ID da sua fila.ACCESS_TOKEN
: a sua chave de acesso. Pode obter este valor executando o seguinte no seu terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
No exemplo de código seguinte, indique o valor do token de autenticação.
Forneça os seus próprios controladores de tarefas de destino HTTP
Os processadores de tarefas de destino HTTP são muito semelhantes aos processadores de tarefas do App Engine, com as seguintes exceções:
- Tempos limite: para todos os controladores de tarefas de destino HTTP, o tempo limite predefinido é de 10 minutos, com um máximo de 30 minutos.
- Lógica de autenticação: se estiver a escrever o seu próprio código no serviço segmentado para validar o token, deve usar um token de ID. Para mais informações sobre o que isto implica, consulte OpenID Connect, em particular Validar um token de ID.
Cabeçalhos: um pedido de destino HTTP tem cabeçalhos definidos pela fila, que contêm informações específicas da tarefa que o seu controlador pode usar. Estes são semelhantes, mas não idênticos, aos cabeçalhos definidos nos pedidos de tarefas do App Engine. Estes cabeçalhos fornecem informações apenas. Não devem ser usados como fontes de identidade.
Se estes cabeçalhos estiverem presentes num pedido de um utilizador externo à sua app, são substituídos pelos internos. A única exceção é para pedidos de administradores com sessão iniciada da aplicação, que podem definir cabeçalhos para fins de teste.
Os pedidos de destino HTTP contêm sempre os seguintes cabeçalhos:
Cabeçalho Descrição X-CloudTasks-QueueName
O nome da fila. X-CloudTasks-TaskName
O nome "curto" da tarefa ou, se não tiver sido especificado nenhum nome na criação, um ID exclusivo gerado pelo sistema. Este é o valor my-task-id
no nome da tarefa completo, ou seja, task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
O número de vezes que esta tarefa foi repetida. Para a primeira tentativa, este valor é 0
. Este número inclui tentativas em que a tarefa falhou devido a códigos de erro 5XX e nunca atingiu a fase de execução.X-CloudTasks-TaskExecutionCount
O número total de vezes que a tarefa recebeu uma resposta do controlador. Uma vez que o Cloud Tasks elimina a tarefa assim que recebe uma resposta bem-sucedida, todas as respostas anteriores do controlador foram falhas. Este número não inclui falhas devido a códigos de erro 5XX. X-CloudTasks-TaskETA
A hora agendada da tarefa, especificada em segundos desde 1 de janeiro de 1970. Além disso, os pedidos do Cloud Tasks podem conter os seguintes cabeçalhos:
Cabeçalho Descrição X-CloudTasks-TaskPreviousResponse
O código de resposta HTTP da nova tentativa anterior. X-CloudTasks-TaskRetryReason
O motivo da repetição da tarefa.
Adicione manualmente a função de agente do serviço Cloud Tasks
Pode adicionar manualmente a função
Agente do serviço Cloud Tasks
(roles/cloudtasks.serviceAgent
) à sua conta do serviço Cloud Tasks, que é o
agente do serviço principal para o
Cloud Tasks.
Isto só é necessário se tiver ativado a API Cloud Tasks antes de 19 de março de 2019.
Consola
- Encontre e copie o número do projeto para o seu Google Cloud projeto na página Boas-vindas da consola Google Cloud .
Na Google Cloud consola, aceda à página IAM.
Clique em Conceder acesso. O painel Conceder acesso é aberto.
Na secção Adicionar responsáveis, adicione um endereço de email neste formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo seu Google Cloud número do projeto.Na secção Atribuir funções, pesquise e selecione Agente de serviço do Cloud Tasks.
Clique em Guardar.
gcloud
Encontre o número do projeto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Substitua PROJECT_ID pelo ID do seu projeto.
Copie o número.
Conceda à conta de serviço do Cloud Tasks a função
Cloud Tasks Service Agent
através do número do projeto que copiou:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role roles/cloudtasks.serviceAgent
Substitua o seguinte:
PROJECT_ID
: o ID do Google Cloud projeto.PROJECT_NUMBER
: o número do seu Google Cloud projeto.
Outras configurações
Existem vários atributos de tarefas que pode configurar. Para ver uma lista completa, consulte a definição do recurso de tarefas. Por exemplo, pode personalizar os seguintes atributos:
- Atribuição de nomes: se optar por especificar um nome para a tarefa, o Cloud Tasks pode usar esse nome para garantir a desduplicação de tarefas, embora o processamento necessário para tal possa aumentar a latência.
- Agendamento: pode agendar uma tarefa para uma hora futura. Isto é suportado
apenas para
CreateTask
e não é suportado paraBufferTask
.
Também pode configurar atributos da fila, como substituições de encaminhamento, limites de taxa e parâmetros de repetição. Estas configurações são aplicadas a todas as tarefas numa fila. Para mais informações, consulte o artigo Configure filas do Cloud Tasks.
O que se segue?
- Saiba mais acerca das tarefas de destino HTTP na referência da API RPC.
- Saiba mais sobre as tarefas de destino HTTP na referência da API REST.