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 que todas as execuções do fluxo de trabalho secundário terminem antes de devolver um resumo das execuções bem-sucedidas e com falhas, simplificando a deteção de erros.
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.