É 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.
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 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 Google Cloud .
O console Google Cloud gera 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 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 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 com seu Google Cloud ID do projeto.
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: o ID do projeto do 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