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 do fluxo de trabalho.

Observe que é preciso basear o limite de taxa no limite do Workflows para solicitações de gravação da API de execução. Se necessário, é possível solicitar um aumento para a maioria das cotas no console do Google Cloud. Saiba mais sobre solicitações de aumento de cota.

Para mais informações, consulte Noções básicas sobre o Cloud Tasks.

Antes de começar

  1. Se você ainda não tiver um fluxo de trabalho que queira enfileirar, crie um.
  2. Ative a API Cloud Tasks.

    Ative a 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 tenha entre 6 e 30 caracteres. Ele 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