Neste tutorial, mostramos como criar e executar um fluxo de trabalho principal 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 principal processe dados em ramificações paralelas e reduz o tempo geral de execução. O fluxo de trabalho principal 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 principal.
- Crie e implante um fluxo de trabalho principal que execute vários fluxos de trabalho filhos
usando um loop
forparalelo. - 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 filho bem-sucedidas e com falha são armazenados e retornados em um mapa.
É possível executar os comandos a seguir no console Google Cloud ou usando a Google Cloud CLI no terminal ou no Cloud Shell.
Custos
Neste documento, você vai 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 de Google Cloud .
Console
-
Faça login na sua Conta do Google.
Se você ainda não tiver uma, inscreva-se agora.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflow Executions and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflow Executions and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
Faça login na sua Conta do Google.
Se você ainda não tiver uma, inscreva-se agora.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Workflow Executions e Workflows:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configure a autenticação:
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
roles/iam.serviceAccountCreator) e o papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis. -
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. -
Conceda o papel do IAM
roles/workflows.invokerà conta de serviço:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Substitua:
SERVICE_ACCOUNT_NAME: o nome da conta de serviço.PROJECT_ID: o ID do projeto em que você criou a conta de serviço
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Workflow Executions e Workflows:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configure a autenticação:
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
roles/iam.serviceAccountCreator) e o papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis. -
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. -
Conceda o papel do IAM
roles/workflows.invokerà conta de serviço:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Substitua:
SERVICE_ACCOUNT_NAME: o nome da conta de serviço.PROJECT_ID: o ID do projeto em que você criou a conta de serviço
-
Verifique se você tem o papel do IAM de criação de contas de serviço
(
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 é par ou ímpar) para simular o sucesso ou a falha da execução do fluxo de trabalho.
Console
No console Google Cloud , acesse a página Fluxos de trabalho.
Clique em Criar.
Insira o nome
workflow-childpara o novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que você criou.
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.yamlAbra o arquivo de código-fonte em um editor de texto e copie o fluxo de trabalho a seguir 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_NAMEpelo nome da conta de serviço que você criou anteriormente.
Criar e implantar o fluxo de trabalho principal
O fluxo de trabalho principal executa várias ramificações do fluxo de trabalho secundário usando um loop for paralelo.
Copie o código-fonte da definição do fluxo de trabalho. Ela 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 principal aguarda e armazena o resultado de cada execução de fluxo de trabalho secundário. Para mais informações, consulte Conector da API Execuções do Workflows e 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 Google Cloud , acesse a página Fluxos de trabalho:
Clique em Criar.
Insira o nome
workflow-parentpara o novo fluxo de trabalho.Na lista Região, selecione us-central1.
Selecione a conta de serviço que você criou.
Clique em Próxima.
No editor de fluxo de trabalho, cole a definição do fluxo de trabalho principal.
Clique em Implantar.
gcloud
Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch workflow-parent.yamlAbra o arquivo de código-fonte em um editor de texto e cole a definição do fluxo de trabalho principal.
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_NAMEpelo nome da conta de serviço que você criou anteriormente.
Executar o fluxo de trabalho principal
Execute o fluxo de trabalho principal para que as invocações do fluxo de trabalho filho sejam executadas em paralelo. As execuções levam cerca de 10 segundos para serem concluídas.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Na página Fluxos de trabalho, clique no fluxo de trabalho workflow-parent 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 serão semelhantes aos seguintes, 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 serão semelhantes aos seguintes, 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 ramificações 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:
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
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.