Neste tutorial, mostramos como criar uma fila do Cloud Tasks pode regular a taxa de execução do fluxo de trabalho.
Há um número máximo de fluxos de trabalho ativos
execuções que podem acontecer
simultaneamente. Quando essa cota for esgotada e se a
acumulação de execuções
estiver desativada ou se a cota de execuções acumuladas for atingida, todas as novas
execuções vão falhar com um código de status HTTP 429 Too many requests
. Ativando uma fila do Cloud Tasks para executar fluxos de trabalho filhos a uma taxa que você define, é possível evitar problemas relacionados à cota do Workflows e alcançar uma taxa de execução melhor.
Observe que o Cloud Tasks foi projetado para fornecer "pelo menos uma vez" entrega No entanto, o Workflows não garante uma permissão exata processamento de solicitações duplicadas do Cloud Tasks.
No diagrama a seguir, um fluxo de trabalho pai invoca fluxos de trabalho filhos que são regulados por uma fila do Cloud Tasks com uma taxa de envio aplicada.
Objetivos
Neste tutorial, você aprenderá a:
- Crie uma fila do Cloud Tasks que funcione como um intermediário entre os fluxos de trabalho pai e filho.
- Crie e implante um fluxo de trabalho filho que receba dados do fluxo de trabalho pai.
- Crie e implante o fluxo de trabalho pai que executa o fluxo de trabalho filho pela fila do Cloud Tasks.
- Executa o fluxo de trabalho pai sem um limite de taxa de despacho, que invoca executadas do fluxo de trabalho filho.
- Aplique um limite de envio à fila do Cloud Tasks e execute o fluxo de trabalho pai.
- Os fluxos de trabalho filhos são executados na taxa definida pela fila do Cloud Tasks.
É possível executar os comandos a seguir no console do Google Cloud ou usando a Google Cloud CLI no seu terminal ou no Cloud Shell.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.
Console
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
- No console do Google Cloud, acesse a página IAM para definir as permissões da conta de serviço padrão do Compute Engine.
Anote os requisitos do Compute Engine padrão da conta de serviço. Você a associará aos fluxos de trabalho neste tutorial para fins de teste. Essa conta de serviço é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine e com o seguinte formato de e-mail:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo número do projeto do Google Cloud. O número do projeto está na página Olá! do console do Google Cloud.Para ambientes de produção, recomendamos criar uma nova conta de serviço e conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias e sigam o princípio de privilégio mínimo.
- Selecione a conta de serviço padrão do Compute Engine e, nessa linha, clique em Editar principal.
- Na caixa de diálogo que aparece, clique em
- Na lista Selecionar um papel, selecione Fluxos de trabalho > Invocador de fluxos de trabalho para que a conta tenha permissão para acionar a execução do fluxo de trabalho.
- Na lista Selecionar um papel, selecione Cloud Tasks > Enfileiramento de tarefas do Cloud Tasks para que a conta tenha permissão para criar tarefas.
Adicionar outro papel e adicionar o
os seguintes papéis:
- Clique em Salvar.
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com Anote a conta de serviço padrão do Compute Engine, porque você vai associá-la aos fluxos de trabalho neste tutorial para fins de teste. Essa conta de serviço é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine e com o seguinte formato de e-mail:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo seu Número do projeto do Google Cloud. Para encontrar o número do projeto, execute o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para ambientes de produção, recomendamos criar uma nova conta de serviço e conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias e sigam o princípio de privilégio mínimo.
- Conceda o
papel de Invocador do fluxo de trabalho
(
roles/workflows.invoker
) no projeto à conta de serviço padrão do Compute Engine para que ela tenha permissão para acionar a execução do fluxo de trabalho.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Substitua:
PROJECT_ID
: o ID do projeto do Google CloudPROJECT_NUMBER
: o número do projeto do Google Cloud.
- Conceda
Papel de enfileirador do Cloud Tasks
(
roles/cloudtasks.enqueuer
) no projeto para a conta de serviço padrão do Compute Engine para que ela tenha permissão para criar tarefas.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Criar uma fila do Cloud Tasks
Crie uma fila do Cloud Tasks que possa ser usada no fluxo de trabalho pai e que permita regular a taxa de execuções do fluxo de trabalho.
Console
No console do Google Cloud, acesse a página Cloud Tasks:
Clique em
. Criar fila push.Insira o Nome da fila,
queue-workflow-child
.Na lista Região, selecione us-central1 (Iowa).
Clique em Criar.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Criar e implantar um fluxo de trabalho filho
Um fluxo de trabalho filho pode receber e processar dados de um fluxo de trabalho pai. Crie e implante um fluxo de trabalho filho que faça o seguinte:
- Recebe um
iteration
como argumento. - Coloca em suspensão por 10 segundos para simular algum processamento
Retorna uma string após a execução bem-sucedida
Console
No console do Google Cloud, abra a página Workflows.
Clique em
Criar.Digite o nome,
workflow-child
, para o novo fluxo de trabalho.Na lista Região, selecione us-central1 (Iowa).
Na lista Conta de serviço, selecione a conta de serviço padrão do Compute Engine.
Clique em Próxima.
No editor de fluxo de trabalho, insira a seguinte definição:
Clique em Implantar.
gcloud
Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch workflow-child.yaml
Abra o arquivo de código-fonte em um editor de texto e copie o seguinte fluxo de trabalho para o arquivo.
Implante o fluxo de trabalho:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Criar e implantar o fluxo de trabalho pai
O fluxo de trabalho pai executa várias ramificações do fluxo de trabalho filho usando um
loop for
.
Copie o código-fonte que define o fluxo de trabalho pai:
O fluxo de trabalho consiste nas seguintes partes:
Um mapa usado para atribuir constantes que se referem ao fluxo de trabalho filho e ao nome da fila do Cloud Tasks. Para mais informações, consulte Google Maps.
Uma repetição
for
que é executada para invocar o fluxo de trabalho filho de maneira iterativa. Para mais informações, consulte Iteração.Uma etapa de fluxo de trabalho que cria e adiciona um grande número de tarefas ao Fila do Cloud Tasks para executar o fluxo de trabalho filho. Para mais informações, consulte o conector da API Cloud Tasks.
Implante o fluxo de trabalho:
Console
No console do Google Cloud, acesse Fluxos de trabalho página:
Clique em
Criar.Digite o nome,
workflow-parent
, para o novo fluxo de trabalho.Na lista Região, selecione us-central1 (Iowa).
Na lista Conta de serviço, selecione a conta de serviço padrão do Compute Engine.
Clique em Próxima.
No editor de fluxo de trabalho, cole a definição do fluxo de trabalho pai.
Clique em Implantar.
gcloud
Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch workflow-parent.yaml
Abra o arquivo de código-fonte em um editor de texto e cole a definição do fluxo de trabalho pai.
Implante o fluxo de trabalho:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Executar o fluxo de trabalho pai sem limites de taxa
Execute o fluxo de trabalho pai para invocar os fluxos de trabalho filhos por meio do fila do Cloud Tasks. As execuções devem levar cerca de 10 segundos para serem concluídas.
Console
No console do Google Cloud, acesse a página Fluxos de trabalho:
Na página Fluxos de trabalho, clique no workflow-parent acessar a página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Enquanto o fluxo de trabalho pai está em execução, volte à página Fluxos de trabalho e clique no fluxo de trabalho filho para acessar a página de detalhes dele.
Clique na guia Executions.
Você vai notar as execuções do fluxo de trabalho filho, sendo executadas ao mesmo tempo, semelhante a este:
gcloud
Execute o fluxo de trabalho:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar se uma execução de fluxo de trabalho foi acionada, liste as quatro últimas executions:
gcloud workflows executions list workflow-child --limit=4
Como o número de execuções (100) está abaixo do limite de simultaneidade Workflows, os resultados serão semelhante ao seguinte. Podem surgir problemas de cota se você enviar de milhares de execuções ao mesmo tempo.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
Você criou e implantou um fluxo de trabalho que invoca 100 iterações do fluxo de trabalho filho.
Executar o fluxo de trabalho pai com limites de taxa
Aplique um limite de taxa de um envio por segundo à fila do Cloud Tasks e execute o fluxo de trabalho pai.
Console
No console do Google Cloud, acesse Cloud Tasks. página:
Clique em queue-workflow-child, na fila do Cloud Tasks criado e clique em Editar fila.
Na seção Limites de taxa para despachos de tarefas, para a No campo Máximo de despachos, digite 1.
Clique em Salvar.
Acesse a página Fluxos de trabalho:
Clique no fluxo de trabalho workflow-parent para acessar a página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Enquanto o fluxo de trabalho pai está em execução, volte à página Fluxos de trabalho e clique no fluxo de trabalho filho para acessar a página de detalhes dele.
Clique na guia Executions.
Você vai notar as execuções do fluxo de trabalho filho, executadas a uma solicitação por segundo, semelhante a esta:
gcloud
Atualize a fila do Cloud Tasks para aplicar um limite de taxa de um despacho por segundo:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Execute o fluxo de trabalho:
gcloud workflows run workflow-parent \ --location=us-central1
Para verificar se uma execução de fluxo de trabalho foi acionada, liste as quatro últimas execuções:
gcloud workflows executions list workflow-child --limit=4
Os resultados serão semelhantes aos seguintes, com um fluxo de trabalho executado por segundo:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
Você implantou um fluxo de trabalho que invoca 100 iterações do fluxo de trabalho filho com uma taxa de envio de uma execução por segundo.
Limpar
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Excluir recursos do tutorial
Exclua os fluxos de trabalho e os recursos do Cloud Tasks criados neste tutorial:
Console
Para excluir os fluxos de trabalho, siga estas etapas:
No console do Google Cloud, acesse a página Fluxos de trabalho:
Na lista de fluxos de trabalho, clique em um para acessar Página Detalhes do fluxo de trabalho.
Clique em
Excluir.Digite o nome do fluxo de trabalho e clique em Confirmar.
Para excluir a fila do Cloud Tasks, siga estas etapas:
No console do Google Cloud, acesse Cloud Tasks. página:
Selecione o nome da fila que você quer excluir e clique em Excluir fila.
Confirme a ação.
gcloud
Para excluir os fluxos de trabalho, execute estes comandos:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Para excluir a fila do Cloud Tasks, execute este comando:
gcloud tasks queues delete queue-workflow-child
A seguir
- Para saber mais sobre como usar o Cloud Tasks para enfileirar um fluxo de trabalho e executá-lo de forma assíncrona, consulte Fila de execuções de fluxo de trabalho usando o Cloud Tasks.
- Para saber mais sobre a sintaxe do Workflows, consulte a referência de sintaxe do Workflows.