Você pode usar o Cloud Tasks para enfileirar um fluxo de trabalho e executá-lo de maneira assíncrona.
O Cloud Tasks oferece os seguintes controles:
- Agendar horários de entrega específicos
- Gerenciar taxas de envio
- Configurar o comportamento de repetição
- Acessar e gerenciar tarefas individuais em uma fila
- Ativar a eliminação de duplicação de tarefas
Esses controles podem ser úteis, por exemplo, para gerenciar solicitações que acionam um fluxo de trabalho e que podem exceder inesperadamente os limites do Workflows. Ao configurar uma fila do Cloud Tasks com limites de taxa e novas tentativas, é possível garantir que todas essas solicitações resultem em execuções de fluxo de trabalho.
Para mais informações, consulte Noções básicas sobre o Cloud Tasks.
Observe o seguinte:
Baseie o limite de taxa no limite de fluxos de trabalho para solicitações de gravação da API Execution. Se é possível solicitar um aumento para a maioria das cotas no console do Google Cloud. Saiba mais sobre solicitações de aumento de cota.
O Cloud Tasks foi projetado para fornecer a entrega "pelo menos uma vez". No entanto, o Workflows não garante o processamento exato de solicitações duplicadas do Cloud Tasks.
É possível remover atrasos de execução e maximizar a capacidade de processamento ativando a execução de backlogging nos fluxos de trabalho. Execuções com backlog executadas automaticamente assim que a cota de simultaneidade de execução fica disponível. Para mais informações, consulte Gerenciar o backlogging de execução.
Antes de começar
- Se ainda não houver um fluxo de trabalho para enfileirar, crie uma.
-
Enable the Cloud Tasks API.
Enfileirar uma tarefa para executar um fluxo de trabalho
Crie uma conta de serviço para que o Cloud Tasks possa fazer solicitações à API Workflows:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAME
por um nome que seja entre 6 e 30 caracteres. Pode conter caracteres alfanuméricos minúsculos e traços. Depois de criar uma conta de serviço, não é possível alterar o nome dela.Para permitir que a principal que executará os comandos do Cloud Tasks atue como uma conta de serviço do Identity and Access Management (IAM), conceda um papel que permita à principal personificar a conta de serviço.
Conceda à nova conta de serviço o papel workflows.invoker para que a conta tenha permissão para acionar o fluxo de trabalho:
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/workflows.invoker
Substitua:
PROJECT_NAME
: o nome do seu projeto do Google Cloud.SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que você criou anteriormente.
Se você ainda não tiver uma fila do Cloud Tasks, crie uma.
Crie uma tarefa que vise o endpoint HTTP do fluxo de trabalho usando a conta de serviço criada anteriormente para autenticação:
gcloud tasks create-http-task \ --queue="QUEUE_ID" \ --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \ --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \ --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"
Substitua:
QUEUE_ID
: o identificador atribuído à sua fila do Cloud Tasks; por exemplo,my-queue
.PROJECT_NAME
: o nome do seu projeto do Google Cloud.REGION_NAME
: a região em que seu fluxo de trabalho está, comous-central1
.WORKFLOW_NAME
: o nome do fluxo de trabalho para o qual você quer criar uma tarefa.DOUBLE_ESCAPED_JSON_STRING
: uma codificação JSON de todos os argumentos que você estiver transmitindo. As aspas duplas dentro da string entre aspas são escapadas usando barras invertidas (\). Por exemplo: .--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que você criou anteriormente.
A tarefa será criada e adicionada à fila do Cloud Tasks. A tarefa persiste na fila até que a execução do fluxo de trabalho seja iniciada e retorna um código de status HTTP
2xx
. Nesse momento, o Cloud Tasks considera a tarefa concluída.
A seguir
- Tutorial: usar uma fila do Cloud Tasks para armazenar as execuções do fluxo de trabalho
- Gerenciar filas e tarefas
- Gerenciar a fila de execução
- Transmitir argumentos de ambiente de execução em uma solicitação de execução