Fila de execuções de fluxo de trabalho usando o Cloud Tasks

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

  1. Se ainda não houver um fluxo de trabalho para enfileirar, crie uma.
  2. Enable the Cloud Tasks API.

    Enable the API

Enfileirar uma tarefa para executar um fluxo de trabalho

  1. 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.

  2. 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.

  3. 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.
  4. Se você ainda não tiver uma fila do Cloud Tasks, crie uma.

  5. 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á, como us-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