Com essa versão de destinos HTTP, os gerenciadores do Cloud Tasks agora podem ser executados em qualquer endpoint HTTP com um endereço IP público, como Cloud Functions, Cloud Run, 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.
Mostraremos nesta página como criar tarefas de HTTP Target de forma programática e colocá-las nas filas do Cloud Tasks. Quando quiser processar uma tarefa, você precisará criar um novo objeto de tarefa e colocá-lo em uma fila. É possível especificar o serviço e o manipulador que processam a tarefa e, se quiser, passar dados específicos da tarefa para o manipulador. Também é possível ajustar a configuração da tarefa, como agendá-la caso ela precise ser executada posteriormente ou limitar o número de vezes que a tarefa será repetida se falhar. Se você optar por especificar um nome para a tarefa, o Cloud Tasks poderá usá-lo para garantir a eliminação da duplicação da tarefa, embora o processamento necessário para isso possa aumentar a latência.
Em geral, é possível criar tarefas na forma de uma solicitação HTTP. Ao usar as bibliotecas de cliente do Google Cloud e uma conta de serviço, como nas amostras a seguir, pode ajudar a gerenciar detalhes de comunicação com o servidor do Cloud Tasks e facilitar a criação de tarefas.
Como criar tarefas de destino HTTP
Os exemplos abaixo mostram como criar solicitações de tarefa de HTTP Target que constroem a tarefa, incluindo a URL do gerenciador.
C#
Python
Observe o arquivo requirements.txt
:
Java
Observe o arquivo pom.xml
:
PHP
Observe o arquivo composer.json
:
Go
Node.js
Observe o arquivo package.json
:
Ruby
Como configurar contas 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.
Se você tiver uma conta de serviço atual que queira usar, é possível. Apenas conceda 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.
Acesse a página do console Contas de serviço.
Se necessário, selecione o projeto apropriado.
Clique em + Criar conta de serviço.
Atribua um nome de exibição à conta. O console cria um nome de conta de e-mail relacionado para a conta. É assim que você faz referência à conta. É possível também adicionar uma descrição da finalidade da conta, se desejar.
Clique em Criar Você passa para a tela Permissões da conta de serviço.
Clique na lista suspensa Selecionar um papel.
Role até Cloud Tasks na coluna à esquerda e selecione Cloud Tasks Enqueuer à direita. Isso dá à conta de serviço permissão para adicionar tarefas à fila.
Clique em Adicionar outro papel.
Clique na nova lista suspensa Selecionar um papel.
Role até Contas de serviço na coluna à esquerda e selecione Usuário da conta de serviço à direita. Esse papel permite que a conta de serviço autorize a fila a criar tokens em seu nome usando as credenciais da conta de serviço.
Se o gerenciador fizer parte do Google Cloud, conceda à conta de serviço o papel associado ao acesso ao serviço em que o gerenciador está em execução. Cada serviço no Google Cloud requer um papel diferente. Por exemplo, para acessar um gerenciador no Cloud Run, é preciso ter o papel Cloud Run Invoker e assim por diante. Você pode usar a conta de serviço que acabou de criar ou qualquer outra conta de serviço no projeto.
O próprio Cloud Tasks precisa ter uma conta de serviço que tenha o papel
Cloud Tasks Service Agent
concedido. Dessa forma, ele pode gerar tokens de cabeçalho com base nas credenciais associadas à conta de serviço do Cloud Tasks para autenticação com seu destino de gerenciador. Com esse papel, a conta de serviço do Cloud Tasks é criada automaticamente quando você ativa a API Cloud Task, a menos que você a tenha habilitado antes de 19 de março de 2019. Se esse for o caso, você precisa adicionar o papel manualmente.
Como usar tarefas de destino HTTP com tokens de autenticação
Para autenticar entre o Cloud Tasks e um gerenciador de destino HTTP, 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 solicitação, com o token, é enviada, via HTTPS, da fila para o gerenciador.
É possível usar um token OIDC ou um token OAuth. Os tokens OIDC são Tokens Web JSON com assinatura (JWT) e são usados principalmente para declarar a identidade e não para fornecer qualquer autorização implícita contra um recurso, ao contrário de tokens OAuth, que fornecem acesso. Os tokens OIDC geralmente devem ser usados para qualquer gerenciador
em execução no Google Cloud, por exemplo, no Cloud Functions ou no Cloud Run.
A principal exceção é para APIs Google hospedadas em *.googleapis.com
: essas APIs esperam um token OAuth. Especifique se será OIDC ou OAuth na própria solicitação.
Os exemplos a seguir mostram como criar solicitações de tarefa que também incluem a criação de um token de cabeçalho. Os tokens OIDC são usados nos exemplos abaixo. Se for um token OAuth, substitua o parâmetro OIDC pelo parâmetro OAuth apropriado da linguagem ao criar uma solicitação.
Python
Observe o arquivo requirements.txt
:
Java
Observe o arquivo pom.xml
:
Go
Node.js
Observe o arquivo package.json
:
Como fornecer os próprios gerenciadores de tarefa de HTTP Target
Os gerenciadores de tarefas de HTTP Target são muito parecidos com os gerenciadores de tarefas do App Engine, com as seguintes exceções:
- Tempo limite: em todos os gerenciadores de tarefa de HTTP Target, o tempo limite padrão é de 10 minutos, e 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 OIDC. Para mais informações, consulte OpenID Connect (em inglês), especialmente a seção 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 aplicativo, 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.
Como adicionar o papel de Agente de serviço do Cloud Tasks à sua conta de serviço do Cloud Tasks manualmente
Isso é necessário somente se você ativou a API Cloud Tasks antes de 19 de março de 2019.
Como usar o console
- Encontre o número do projeto na página de configurações do projeto do Google Cloud.
- Copie o número.
- Abra a página do Admin Console do IAM.
- Clique em
Add
. A telaAdd members
é aberta. Na caixa de diálogo "Novos membros", adicione um endereço de e-mail no seguinte formato:
service-[project-number]@gcp-sa-cloudtasks.iam.gserviceaccount.com
Substitua [project-number] pelo número do seu projeto acima.
Na lista suspensa
Select a role
, escolhaService Management
->Cloud Tasks Service Agent
Clique em
Save
.
Uso da gcloud
Encontre seu número do projeto:
gcloud projects describe [project-id] --format='table(projectNumber)'
Substituindo [project-id] pelo ID do 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] pelo ID do projeto e [project-number] pelo número do projeto acima.
A seguir
- Saiba mais sobre as tarefas de destino HTTP na referência da API RPC.
- Saiba mais sobre as tarefas de HTTP Target na referência da API REST.