Coloque execuções de fluxos de trabalho em fila com o Cloud Tasks

Pode usar o Cloud Tasks para colocar um fluxo de trabalho numa fila e executá-lo de forma assíncrona.

O Cloud Tasks oferece os seguintes controlos:

  • Agende horas de entrega específicas
  • Faça a gestão das taxas de fornecimento
  • Configure o comportamento de repetição
  • Aceda e faça a gestão de tarefas individuais numa fila
  • Ative a desduplicação de tarefas

Estes controlos podem ser úteis, por exemplo, para gerir pedidos que acionam um fluxo de trabalho e que podem exceder inesperadamente os limites dos Workflows. Ao configurar uma fila do Cloud Tasks com limites de taxa e novas tentativas, pode garantir que todos esses pedidos resultam em execuções do fluxo de trabalho.

Para mais informações, consulte o artigo Compreenda o Cloud Tasks.

Tenha em conta o seguinte:

  • Deve basear o limite de taxa no limite dos fluxos de trabalho para pedidos de gravação da API Execution. Se for necessário, pode pedir um ajuste à maioria das quotas na Google Cloud consola. Saiba mais acerca dos ajustes de quota.

  • O Cloud Tasks foi concebido para fornecer uma entrega "pelo menos uma vez"; no entanto, o Workflows não garante o processamento exatamente uma vez de pedidos duplicados do Cloud Tasks.

  • Pode remover atrasos na execução e maximizar o débito ativando o registo de pendências de execução nos fluxos de trabalho. As execuções em atraso são executadas automaticamente assim que a quota de concorrência de execução fica disponível. Para mais informações, consulte o artigo Faça a gestão do atraso na execução.

Antes de começar

  1. Se ainda não tiver um fluxo de trabalho que queira colocar em fila, crie um.
  2. Enable the Cloud Tasks API.

    Enable the API

Coloque uma tarefa em fila para executar um fluxo de trabalho

  1. Crie uma conta de serviço para que o Cloud Tasks possa fazer pedidos à API Workflows:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Substitua SERVICE_ACCOUNT_NAME por um nome que tenha entre 6 e 30 carateres. Pode conter carateres alfanuméricos em minúsculas e traços. Depois de criar uma conta de serviço, não pode alterar o respetivo nome.

  2. Para permitir que o principal que vai executar os comandos do Cloud Tasks tenha a capacidade de atuar como uma conta de serviço de gestão de identidade e de acesso (IAM), conceda uma função que permita ao principal representar a conta de serviço.

  3. Conceda à nova conta de serviço a função workflows.invoker para que a conta tenha autorização para acionar o seu 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 o seguinte:

    • PROJECT_NAME: o nome do seu Google Cloud projeto.
    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço que criou anteriormente.
  4. Se ainda não tiver uma fila do Cloud Tasks, crie uma.

  5. Crie uma tarefa que tenha como destino o ponto final HTTP do seu fluxo de trabalho, usando a conta de serviço que criou anteriormente para autenticar:

    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 o seguinte:

    • QUEUE_ID: o identificador que atribuiu à sua fila do Cloud Tasks; por exemplo, my-queue.
    • PROJECT_NAME: o nome do seu Google Cloud projeto.
    • REGION_NAME: a região em que o fluxo de trabalho se encontra, como us-central1.
    • WORKFLOW_NAME: o nome do fluxo de trabalho para o qual quer criar uma tarefa.
    • DOUBLE_ESCAPED_JSON_STRING: uma codificação JSON de quaisquer argumentos que esteja a transmitir. As aspas duplas na string entre aspas são interpretadas de forma literal através de barras invertidas (\). Por exemplo: --body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço que criou anteriormente.

    A tarefa é criada e adicionada à sua fila do Cloud Tasks. A tarefa persiste na fila até que a execução do fluxo de trabalho seja iniciada e devolve um código de estado HTTP 2xx. Nesse momento, o Cloud Tasks considera a tarefa concluída.

O que se segue?