Este tutorial mostra como criar e executar um fluxo de trabalho principal que executa vários fluxos de trabalho secundários em paralelo.
No diagrama seguinte, são invocadas quatro execuções paralelas do fluxo de trabalho filho. Isto permite que o fluxo de trabalho principal processe dados em ramificações paralelas e reduz o tempo de execução geral. O fluxo de trabalho principal aguarda a conclusão de todas as execuções do fluxo de trabalho secundário antes de devolver um resumo das execuções bem-sucedidas e com falhas, simplificando a deteção de erros.
Objetivos
Neste tutorial, vai:
- Crie e implemente um fluxo de trabalho secundário que receba dados de um fluxo de trabalho principal.
- Crie e implemente um fluxo de trabalho principal que execute vários fluxos de trabalho secundários
usando um ciclo
for
paralelo. - Execute o fluxo de trabalho principal que invoca execuções paralelas do fluxo de trabalho secundário.
- Os resultados de todas as execuções de fluxo de trabalho secundário bem-sucedidas e com falhas são armazenados e devolvidos num mapa.
Pode executar os seguintes comandos na Google Cloud consola ou através da CLI Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
Consola
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
gcloud
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the roles/workflows.invoker role to the service account.
To grant the role, find the Select a role list, then select roles/workflows.invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflow Executions and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the roles/workflows.invoker role to the service account.
To grant the role, find the Select a role list, then select roles/workflows.invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
Crie e implemente um fluxo de trabalho secundário
Um fluxo de trabalho secundário pode receber e processar dados de um fluxo de trabalho principal. O fluxo de trabalho secundário demonstra isto fazendo o seguinte:
- Recebe um número inteiro como argumento
- Dorme durante 10 segundos para simular algum processamento
Devolve um indicador (com base no facto de o número inteiro ser par ou ímpar) para simular o êxito ou a falha da execução do fluxo de trabalho
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Clique em
Criar.Introduza o nome,
workflow-child
, do novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-child.yaml
Abra o ficheiro de código-fonte num editor de texto e copie o seguinte fluxo de trabalho para o ficheiro.
Implemente o fluxo de trabalho:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que criou anteriormente.
Crie e implemente o fluxo de trabalho principal
O fluxo de trabalho principal executa vários ramos do fluxo de trabalho secundário através de um ciclo for
paralelo.
Copie o código-fonte da definição do fluxo de trabalho. É composto pelas seguintes partes:
É usado um mapa para armazenar os resultados das execuções do fluxo de trabalho secundário. Para mais informações, consulte o artigo Mapas.
Um ciclo
for
é executado em paralelo para invocar o fluxo de trabalho secundário. Para mais informações, consulte os artigos Passos paralelos e Iteração.O fluxo de trabalho secundário é invocado através de um conector. Cada iteração do fluxo de trabalho filho recebe o argumento
iteration
. O fluxo de trabalho principal aguarda e armazena o resultado de cada execução do fluxo de trabalho secundário. Para mais informações, consulte o conector da API Workflows Executions e os argumentos de tempo de execução.Os resultados da execução são devolvidos. Para mais informações, consulte o artigo Conclua a execução de um fluxo de trabalho.
Implemente o fluxo de trabalho:
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza o nome,
workflow-parent
, do novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, cole a definição do fluxo de trabalho principal.
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch workflow-parent.yaml
Abra o ficheiro de código fonte num editor de texto e cole a definição do fluxo de trabalho principal.
Implemente o fluxo de trabalho:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que criou anteriormente.
Execute o fluxo de trabalho principal
Execute o fluxo de trabalho principal para que as invocações do fluxo de trabalho secundário sejam executadas em paralelo. As execuções devem demorar cerca de 10 segundos a concluir.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Na página Fluxos de trabalho, clique no fluxo de trabalho workflow-parent para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
Veja os resultados do fluxo de trabalho no painel Saída.
Os resultados devem ser semelhantes aos seguintes, indicando erros com as iterações 2 e 4, e êxito com as iterações 1 e 3.
"failure": { "2": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":2}", "duration": "10.157992541s", "endTime": "2023-07-11T13:13:13.028424329Z", "error": { "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 2\"", ... "4": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":4}", "duration": "10.157929734s", "endTime": "2023-07-11T13:13:13.061289142Z", "error": { "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 4\"", ... "success": { "1": "Hello world1", "3": "Hello world3"
gcloud
Execute o fluxo de trabalho:
gcloud workflows run workflow-parent \ --location=us-central1
Os resultados devem ser semelhantes aos seguintes, indicando erros com as iterações 2 e 4, e êxito com as iterações 1 e 3.
Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done. argument: 'null' duration: 14.065415004s endTime: '2023-07-11T12:50:43.929023883Z' name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError: ... "Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "success":{"1":"Hello world1","3":"Hello world3"}}' startTime: '2023-07-11T12:50:29.863608879Z' state: SUCCEEDED
Criou e implementou com êxito um fluxo de trabalho que invoca um fluxo de trabalho secundário, executa quatro iterações do fluxo de trabalho secundário em ramificações paralelas e devolve um indicador de êxito ou falha para cada execução do fluxo de trabalho secundário.
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar 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.
Elimine recursos de tutoriais
Elimine os fluxos de trabalho criados neste tutorial:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
O que se segue?
- Para saber mais sobre a sintaxe do Workflows, consulte a referência da sintaxe do Workflows.
- Para saber mais sobre os conetores do Workflows, consulte o artigo Compreender os conetores.