É possível usar o Cloud Tasks para enfileirar com segurança uma tarefa e processá-la de maneira assíncrona por um serviço do Cloud Run. Os casos de uso típicos incluem:
- Como preservar solicitações por meio de incidentes de produção inesperados
- Como suavizar picos de tráfego atrasando o trabalho que não é voltado para o usuário
- Como acelerar o tempo de resposta do usuário delegando operações lentas em segundo plano para serem processadas por outro serviço, como atualizações de banco de dados ou processamento em lote
- Como limitar a taxa de chamadas a serviços de apoio, como bancos de dados e APIs de terceiros
Nesta página, mostramos como colocar em fila tarefas que são enviadas com segurança por meio do protocolo HTTPS para um serviço particular do Cloud Run. Descrevemos o comportamento necessário para o serviço particular do Cloud Run, as permissões necessárias da conta de serviço, a criação da fila de tarefas e a criação de tarefas.
Antes de começar
Ative a API Cloud Tasks no projeto que você está usando.
Como implantar um serviço do Cloud Run para processar tarefas
Para implantar um serviço que aceite tarefas enviadas para a fila de tarefas, implante o serviço da mesma forma que qualquer outro serviço do Cloud Run. O serviço do Cloud Run precisa retornar um
código HTTP 200
para confirmar o sucesso após a conclusão do processamento da tarefa.
As tarefas serão enviadas para esse serviço do Cloud Run como solicitações HTTPS pelo Cloud Tasks.
A resposta ao Cloud Tasks precisa ocorrer dentro do tempo limite configurado. Para cargas de trabalho que precisam ser executadas por mais tempo do que o tempo limite máximo do Cloud Tasks, considere usar jobs do Cloud Run.
Faça a implantação com o Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para criar um serviço, adicione o seguinte ao seu arquivo .tf
:
Como criar uma fila de tarefas
Linha de comando
Para criar uma fila de tarefas, use o comando
gcloud tasks queues create QUEUE-ID
substituindo QUEUE-ID pelo nome que você quer dar à fila de tarefas: ele precisa ser exclusivo no projeto. Se você for solicitado a criar um aplicativo do App Engine no seu projeto, responda y
para criá-lo. O Cloud Tasks usa isso para a fila: escolha o mesmo local que você está usando para o serviço do Cloud Run.
A configuração padrão da fila de tarefas funcionará na maioria dos casos. Mas é possível definir diferentes limites de taxa e repetir parâmetros, se quiser.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para criar uma fila de tarefas, adicione o seguinte ao seu arquivo .tf
:
Para aplicar as mudanças, insira terraform apply
.
Como criar uma conta de serviço para associar às tarefas
Você precisa criar uma conta de serviço que será associada às tarefas enfileiradas. Essa conta de serviço precisa ter o papel do IAM de Chamador do Cloud Run para permitir que a fila de tarefas envie tarefas para o serviço Cloud Run. .
Console
No console do Google Cloud, acesse a página Contas de serviço.
Selecione um projeto.
Insira um nome de conta de serviço a ser exibido no console do Google Cloud.
O console do Google Cloud gerará um ID de conta de serviço com base nesse nome. Edite o ID se for necessário. Não será possível alterar o ID depois.
Opcional: digite uma descrição da conta de serviço.
Clique em Criar e continuar.
Opcional: clique no campo Selecionar um papel.
Selecione Cloud Run > Chamador do Cloud Run.
Clique em Concluído.
Linha de comando
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Substituir
- SERVICE_ACCOUNT_NAME por um nome em letras minúsculas exclusivo no projeto do Google Cloud, por exemplo,
my-invoker-service-account-name
. - DISPLAYED_SERVICE_ACCOUNT_NAME pelo nome que você quer exibir para essa conta de serviço, por exemplo, no console,
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME por um nome em letras minúsculas exclusivo no projeto do Google Cloud, por exemplo,
Para o Cloud Run, conceda à conta de serviço permissão para invocar o serviço:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Substituir
- SERVICE pelo nome do serviço que você quer que seja invocado pelo Cloud Tasks;
- SERVICE_ACCOUNT_NAME pelo nome da conta de serviço;
- PROJECT_ID pelo ID de projeto do Google Cloud;
Conceda à conta de serviço o acesso ao projeto a fim de que ela tenha permissão para concluir ações específicas nos recursos do projeto:
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Substituir
RESOURCE_ID pelo ID do projeto no Google Cloud.
PRINCIPAL: um identificador do principal ou do membro, que geralmente tem o seguinte formato: PRINCIPAL_TYPE:ID. Por exemplo,
user:my-user@example.com
. Para ver uma lista completa dos valores que PRINCIPAL pode ter, consulte a referência de vinculação de políticas.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Adicione a instrução a seguir ao seu arquivo .tf
:
Crie a conta de serviço:
Para o Cloud Run, conceda à conta de serviço permissão para invocar o serviço:
Para aplicar as mudanças, insira terraform apply
.
Como criar tarefas HTTP com tokens de autenticação
Ao criar uma tarefa para enviar à fila de tarefas, você especifica o projeto, o local, o nome da fila, o e-mail da conta de serviço criada anteriormente para associar a tarefas, o URL do serviço particular do Cloud Run que executará a tarefa e quaisquer outros dados que seja necessário enviar. É possível fixar esses valores no código, embora valores como o ID do projeto, o local e o e-mail da conta de serviço possam ser recuperados dinamicamente no servidor de metadados do Cloud Run.
Consulte a documentação da API Cloud Tasks para ver detalhes sobre o corpo da solicitação de tarefa.
Observe que as solicitações que contêm payloads de dados precisam usar o método HTTP PUT
ou POST
.
O código que enfileira as tarefas precisa ter as permissões de IAM necessárias para fazer isso, como o papel de Enfileirador do Cloud Tasks. Seu código terá as permissões de IAM necessárias se você usar a conta de serviço padrão no Cloud Run.
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
:
A seguir
- Como gerar e visualizar registros
- Como monitorar a integridade e o desempenho
- Como acionar a partir do Pub/Sub
- Como invocar com HTTPS
- Como executar serviços de uma programação