Os gerenciadores do Cloud Tasks podem ser executados em qualquer endpoint HTTP com um endereço IP externo, como GKE, Compute Engine ou até mesmo um servidor da Web local. Execute sua tarefas em qualquer um desses serviços de forma confiável e configurável.
Nesta página, mostramos como criar tarefas básicas de destino HTTP de forma programática e colocá-las em filas do Cloud Tasks. O guia de início rápido mostra como fazer isso usando a Google Cloud CLI.
Para tarefas com destinos HTTP (em vez de destinos explícitos do App Engine, que são menos comuns), há duas maneiras de criar tarefas:
Método
CreateTask
:você precisa criar um objeto de tarefa de maneira explícita. Use esse método se as tarefas na sua fila tiverem configurações de roteamento diferentes. Nesse caso, você especifica o roteamento no nível da tarefa e não pode usar o roteamento no nível da fila. Essa abordagem usa o métodoCreateTask
.Método
BufferTask
:use esse método se a fila estiver configurada para armazenar tarefas em buffer na frente de um serviço. A fila precisa ter roteamento no nível da fila. Essa abordagem usa o métodoBufferTask
.
Criar uma tarefa usando o método CreateTask
Esta seção discute a criação de uma tarefa construindo o objeto de tarefa. Use o método CreateTask
.
Ao criar uma tarefa usando o método CreateTask
, você cria e
define explicitamente o objeto de tarefa. É preciso especificar o serviço e o gerenciador que processam a tarefa.
Se quiser, passe dados específicos da tarefa para o manipulador. Também é possível ajustar a configuração da tarefa, como agendar um horário para que ela seja executada ou limitar o número de vezes que a tarefa será repetida se falhar (consulte Configuração avançada).
Os exemplos a seguir chamam o método CreateTask
para criar uma tarefa usando as bibliotecas de cliente do Cloud Tasks.
C#
Go
Java
Observe o arquivo pom.xml
:
Node.js
Observe o arquivo package.json
:
PHP
Observe o arquivo composer.json
:
Python
Observe o arquivo requirements.txt
:
Ruby
Criar uma tarefa usando o método BufferTask
Esta seção explica como criar uma tarefa enviando uma solicitação HTTP. O método
usado é chamado de BufferTask
.
Limitações
O método BufferTask
está sujeito às seguintes limitações:
Bibliotecas de cliente:o método
BufferTask
não é compatível com bibliotecas de cliente.API RPC:o método
BufferTask
não é compatível com a API RPC.Roteamento no nível da tarefa:esse método não oferece suporte ao roteamento no nível da tarefa. Como não há onde adicionar informações de roteamento ao criar uma tarefa dessa forma, você precisa usar o roteamento no nível da fila. Caso contrário, a tarefa não terá informações de roteamento. Se a fila ainda não usar o roteamento no nível da fila, consulte Configurar o roteamento no nível da fila para tarefas HTTP.
Chame o método BufferTask
Os exemplos a seguir mostram como criar uma tarefa enviando uma solicitação HTTP POST
ao endpoint buffer
da API Cloud Tasks.
curl
O snippet de código a seguir mostra um exemplo de criação de tarefas usando o método
BufferTask
com curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Substitua:
HTTP_METHOD
: o método HTTP da sua solicitação, por exemplo,GET
ouPOST
.PROJECT_ID
: o ID do seu projeto do Google Cloud . Para isso, execute o seguinte no terminal:gcloud config get-value project
LOCATION
: o local da fila.QUEUE_ID
: o ID da fila.
Python
Configurar uma conta de serviço para autenticação do gerenciador de destino HTTP
O Cloud Tasks pode chamar gerenciadores de destino HTTP que exigem autenticação se você tiver uma conta de serviço com as credenciais apropriadas para acessar o gerenciador.
Você pode usar sua conta de serviço atual se conceder a ela os papéis apropriados. Estas instruções abrangem a criação de uma nova conta de serviço especificamente para essa função. A conta de serviço nova ou atual usada para a autenticação do Cloud Tasks precisa estar no mesmo projeto que as filas do Cloud Tasks.
No console Google Cloud , acesse a página Contas de serviço.
Se necessário, selecione o projeto apropriado.
Clique em
Criar conta de serviço.Dê um nome à sua conta de serviço. Anote o endereço de e-mail relacionado que é gerado no console. Você vai procurar esse e-mail em uma etapa posterior. Para copiar o e-mail, clique em Copiar para a área de transferência
. Você também pode adicionar uma descrição da finalidade da conta.Clique em Criar e continuar.
Na lista Selecionar um papel, pesquise e selecione Enfileirador do Cloud Tasks (Beta). Esse papel concede à conta de serviço permissão para adicionar tarefas à fila.
Se você estiver usando um gerenciador de Google Cloud , clique em + Adicionar outro papel para conceder à conta de serviço o papel associado ao acesso ao serviço em que o gerenciador está sendo executado. Cada serviço no Google Cloud requer uma função diferente. Por exemplo, para acessar um gerenciador no Cloud Run, conceda o papel Chamador do Cloud Run.
Para concluir a criação da conta de serviço, clique em Concluído.
Para permitir que o Cloud Tasks crie tokens de autenticação usando a conta de serviço que você acabou de criar, conceda o papel Usuário da conta de serviço (
roles/iam.serviceAccountUser
) ao agente de serviço principal do Cloud Tasks na conta de serviço que você acabou de criar.No console Google Cloud , acesse a página Contas de serviço.
Na linha da conta de serviço que você acabou de criar, marque a caixa de seleção e clique em
Gerenciar acesso.No painel Gerenciar acesso, clique em
Adicionar principal.Na lista Novos principais, pesquise e selecione o agente de serviço do Cloud Tasks, que terá um endereço de e-mail no formato
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
.Na lista Selecionar um papel, pesquise e selecione o papel Usuário da conta de serviço.
Clique em Salvar.
Usar tarefas de destino HTTP com tokens de autenticação
Para autenticar entre o Cloud Tasks e um gerenciador de destino HTTP que requer essa autenticação, o Cloud Tasks cria um token de cabeçalho. Esse token é baseado nas credenciais na conta de serviço Cloud Tasks Enqueuer
, identificada pelo endereço de e-mail. A
conta de serviço usada para autenticação precisa fazer parte do mesmo
projeto em que a fila do Cloud Tasks reside. A solicitação, com o token de cabeçalho, é enviada da fila para o gerenciador por HTTPS. É possível usar um token de ID ou um token de acesso.
Os tokens de ID geralmente precisam ser usados em qualquer gerenciador em execução no Google Cloud,
por exemplo, em funções do Cloud Run ou no Cloud Run. A principal exceção é para APIs do Google hospedadas em *.googleapis.com
: essas APIs esperam um token de acesso.
É possível configurar a autenticação no nível da fila ou da tarefa. Para configurar a autenticação no nível da fila, consulte Como limitar o acesso a filas únicas. Se a autenticação for configurada no nível da fila, essa configuração vai substituir a configuração no nível da tarefa. Para configurar a autenticação no nível da tarefa, especifique um token de ID (OIDC) ou um token de acesso (OAuth) na tarefa em si.
Método CreateTask
Os exemplos a seguir usam o método CreateTask
com as bibliotecas de 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 um token de acesso, substitua o parâmetro OIDC pelo parâmetro OAuth apropriado da linguagem ao criar uma solicitação.
Go
Java
Observe o arquivo pom.xml
:
Node.js
Observe o arquivo package.json
:
Python
Observe o arquivo requirements.txt
:
Método BufferTask
Os exemplos a seguir usam as credenciais padrão do aplicativo para autenticar ao
usar 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:
HTTP_METHOD
: o método HTTP da sua solicitação, por exemplo,GET
ouPOST
.PROJECT_ID
: o ID do seu projeto do Google Cloud . Para isso, execute o seguinte no terminal:gcloud config get-value project
LOCATION
: o local da fila.QUEUE_ID
: o ID da fila.ACCESS_TOKEN
: seu token de acesso. Para isso, execute o seguinte no terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
No exemplo de código a seguir, forneça o valor do seu token de autenticação.
Fornecer seus próprios gerenciadores de tarefas de destino HTTP
Os gerenciadores de tarefas de HTTP Target são muito parecidos com os gerenciadores de tarefas do App Engine, com as seguintes exceções:
- Tempos limites: para todos os gerenciadores de tarefas de destino HTTP, o tempo limite padrão é de 10 minutos, com um máximo de 30 minutos.
- Lógica de autenticação: ao escrever o próprio código no serviço de destino para validar o token, você precisa usar um token de ID. Para mais informações, consulte OpenID Connect (em inglês), especialmente Como validar um token de ID (em inglês).
Cabeçalhos: uma solicitação de destino HTTP tem cabeçalhos definidos pela fila, que contém informações específicas da tarefa que seu gerenciador pode usar. Eles são semelhantes, mas não idênticos, aos cabeçalhos definidos nas solicitações de tarefas do App Engine. Esses cabeçalhos fornecem apenas informações. Eles não devem ser usados como fontes de identidade.
Se esses cabeçalhos estiverem presentes em uma solicitação de usuário externo ao seu app, eles serão substituídos pelos internos. A única exceção é para solicitações de administradores conectados do aplicativo, que podem definir cabeçalhos para fins de teste.
As solicitações de destino HTTP sempre contêm os seguintes cabeçalhos:
Cabeçalho Descrição X-CloudTasks-QueueName
O nome da fila. X-CloudTasks-TaskName
O nome abreviado da tarefa ou, se nenhum nome foi especificado na criação, um código exclusivo gerado pelo sistema. Esse é o valor my-task-id
no nome completo da tarefa, 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 novas tentativas para a tarefa. Para a primeira tentativa, esse valor é 0
. Esse número inclui tentativas em que a tarefa falhou devido a códigos de erro 5XX e nunca chegou à fase de execução.X-CloudTasks-TaskExecutionCount
O número total de vezes em que a tarefa recebeu uma resposta do gerenciador. Como o Cloud Tasks exclui a tarefa depois que uma resposta bem-sucedida foi recebida, todas as respostas anteriores do gerenciador falharam. Esse número não inclui falhas devido a códigos de erro 5XX. X-CloudTasks-TaskETA
O horário de agendamento da tarefa, especificado em segundos desde 1º de janeiro de 1970. Além disso, as solicitações do Cloud Tasks podem conter os seguintes cabeçalhos:
Cabeçalho Descrição X-CloudTasks-TaskPreviousResponse
O código de resposta HTTP da tentativa anterior. X-CloudTasks-TaskRetryReason
O motivo para tentar novamente a tarefa.
Adicionar manualmente o papel de agente de serviço do Cloud Tasks
É possível adicionar manualmente o papel Agente de serviço do Cloud Tasks (roles/cloudtasks.serviceAgent
) à sua conta de serviço do Cloud Tasks, que é o agente de serviço principal do Cloud Tasks.
Isso é necessário somente se você ativou a API Cloud Tasks antes de 19 de março de 2019.
Console
- Encontre e copie o número do projeto Google Cloud na página Boas-vindas do console Google Cloud .
No console do Google Cloud , acesse a página IAM.
Clique em Conceder acesso. O painel Conceder acesso é aberto.
Na seção Adicionar principais, adicione um endereço de e-mail neste formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo Google Cloud número do projeto.Na seção Atribuir papéis, pesquise e selecione Agente de serviço do Cloud Tasks.
Clique em Salvar.
gcloud
Encontre seu número do projeto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Substitua PROJECT_ID pela ID do seu projeto.
Copie o número.
Conceda à conta de serviço do Cloud Tasks o papel
Cloud Tasks Service Agent
, usando o número do projeto que você 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:
PROJECT_ID
: o ID do projeto Google Cloud .PROJECT_NUMBER
: o número do projeto Google Cloud.
Outras configurações
Há vários atributos de tarefa que podem ser configurados. Para uma lista completa, consulte a definição de recursos de tarefa. Por exemplo, é possível personalizar os seguintes atributos:
- Nomeação:se você especificar um nome para a tarefa, o Cloud Tasks poderá usá-lo para garantir a eliminação da duplicação de tarefas, embora o processamento necessário para isso possa aumentar a latência.
- Programação:é possível programar uma tarefa para um horário futuro. Esse recurso é compatível apenas com
CreateTask
e não comBufferTask
.
Também é possível configurar atributos da fila, como substituições de roteamento, limites de taxa e parâmetros de nova tentativa. Essas configurações são aplicadas a todas as tarefas em uma fila. Para mais informações, consulte Configurar filas do Cloud Tasks.
A seguir
- Saiba mais sobre as tarefas de destino HTTP na referência da API RPC.
- Saiba mais sobre as tarefas de destino HTTP na referência da API REST.