Este tutorial mostra como criar e executar um fluxo de trabalho pai que executa vários fluxos de trabalho filhos em paralelo.
No diagrama a seguir, quatro execuções paralelas do fluxo de trabalho filho são invocadas. Isso permite que o fluxo de trabalho pai processe dados em filiais paralelas e reduz o tempo de execução geral. O fluxo de trabalho pai aguarda a conclusão de todas as execuções de fluxo de trabalho filho antes de retornar um resumo das execuções bem-sucedidas e com falha, simplificando a detecção de erros.
Objetivos
Neste tutorial, você aprenderá a:
- Crie e implante um fluxo de trabalho filho que receba dados de um fluxo de trabalho pai.
- Crie e implante um fluxo de trabalho pai que execute vários fluxos de trabalho filhos
usando um loop
for
paralelo. - Execute o fluxo de trabalho pai, que invoca execuções paralelas do fluxo de trabalho filho.
- Os resultados de todas as execuções de fluxos de trabalho filhos bem-sucedidas e com falha são armazenados e retornados em um mapa.
É possível executar os comandos a seguir no console do Google Cloud ou usando a Google Cloud CLI no 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 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.
-
Make sure 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.
- 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 Workflow Executions and Workflows APIs:
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/workflows.invoker
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service 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 Workflow Executions and Workflows APIs:
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/workflows.invoker
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
Criar e implantar um fluxo de trabalho filho
Um fluxo de trabalho filho pode receber e processar dados de um fluxo de trabalho pai. O fluxo de trabalho filho demonstra isso fazendo o seguinte:
- Recebe um número inteiro como argumento
- Coloca em suspensão por 10 segundos para simular algum processamento
Retorna um indicador (com base em se o número inteiro é ímpar ou par) para simular o sucesso ou a falha da execução do fluxo de trabalho.
Console
No console do Google Cloud, abra a página Workflows.
Clique em
Criar.Insira o nome
workflow-child
para o novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que você criou anteriormente.
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=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que você criou anteriormente.
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
paralelo.
Copie o código-fonte da definição do fluxo de trabalho. Ele consiste nas seguintes partes:
Um mapa é usado para armazenar os resultados das execuções de fluxo de trabalho filho. Para mais informações, consulte Maps.
Um loop
for
é executado em paralelo para invocar o fluxo de trabalho filho. Para mais informações, consulte Etapas paralelas e Iteração.O fluxo de trabalho filho é invocado usando um conector. Cada iteração do fluxo de trabalho filho recebe o argumento
iteration
. O fluxo de trabalho pai espera e armazena o resultado de cada execução de fluxo de trabalho filho. Para mais informações, consulte o conector da API Workflows Executions e os Argumentos de ambiente de execução.Os resultados da execução são retornados. Para mais informações, consulte Concluir a execução de um fluxo de trabalho.
Implante o fluxo de trabalho:
Console
No console do Google Cloud, acesse a página Fluxos de trabalho:
Clique em
Criar.Insira o nome
workflow-parent
para o novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que você criou anteriormente.
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=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que você criou anteriormente.
Executar o fluxo de trabalho principal
Execute o fluxo de trabalho pai para que as invocações do fluxo de trabalho filho sejam executadas em paralelo. A execução leva cerca de 10 segundos para ser concluída.
Console
No console do Google Cloud, acesse a página Fluxos de trabalho:
Na página Fluxos de trabalho, clique no fluxo de trabalho fluxo de trabalho pai para acessar a página de detalhes dele.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
Confira os resultados do fluxo de trabalho no painel Saída.
Os resultados devem ser semelhantes aos mostrados abaixo, indicando erros nas iterações 2 e 4 e sucesso nas 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 mostrados abaixo, indicando erros nas iterações 2 e 4 e sucesso nas 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
Você criou e implantou um fluxo de trabalho que invoca um fluxo de trabalho filho, executa quatro iterações do fluxo de trabalho filho em filiais paralelas e retorna um indicador de sucesso ou falha para cada execução do fluxo de trabalho filho.
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 criados neste tutorial:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
A seguir
- Para saber mais sobre a sintaxe do Workflows, consulte a referência de sintaxe do Workflows.
- Para saber mais sobre os conectores do Workflows, consulte Noções básicas sobre conectores.