Questo tutorial mostra come creare ed eseguire un flusso di lavoro principale che esegue più flussi di lavoro secondari in parallelo.
Nel seguente diagramma vengono richiamate quattro esecuzioni parallele del flusso di lavoro secondario. Ciò consente al flusso di lavoro principale di elaborare i dati in rami paralleli e riduce il tempo di esecuzione complessivo. Il flusso di lavoro principale attende il completamento di tutte le esecuzioni del flusso di lavoro secondario prima di restituire un riepilogo delle esecuzioni riuscite e non riuscite, semplificando il rilevamento degli errori.
Crea ed esegui il deployment di un flusso di lavoro secondario
Un workflow secondario può ricevere ed elaborare i dati di un workflow principale. Il flusso di lavoro secondario lo dimostra facendo quanto segue:
- Riceve un numero intero come argomento
- Si mette in pausa per 10 secondi per simulare l'elaborazione
Restituisce un indicatore (in base al fatto che l'intero sia un numero pari o dispari) per simulare l'esito positivo o negativo dell'esecuzione del flusso di lavoro
Console
Nella Google Cloud console, vai alla pagina Workflows.
Fai clic su
Crea.Inserisci il nome,
workflow-child
, per il nuovo flusso di lavoro.Nell'elenco Regione, seleziona us-central1.
Seleziona il service account che hai creato in precedenza.
Fai clic su Avanti.
Nell'editor del workflow, inserisci la seguente definizione per il workflow:
Fai clic su Esegui il deployment.
gcloud
Crea un file di codice sorgente per il workflow:
touch workflow-child.yaml
Apri il file del codice sorgente in un editor di testo e copia il seguente flusso di lavoro nel file.
Esegui il deployment del workflow:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
SERVICE_ACCOUNT_NAME
con il nome del account di servizio che hai creato in precedenza.
Crea ed esegui il deployment del workflow principale
Il flusso di lavoro principale esegue più rami del flusso di lavoro secondario utilizzando un ciclo for
parallelo.
Copia il codice sorgente della definizione del workflow. È composto dalle seguenti parti:
Una mappa viene utilizzata per archiviare i risultati delle esecuzioni del workflow secondario. Per ulteriori informazioni, consulta Maps.
Un ciclo
for
viene eseguito in parallelo per richiamare il flusso di lavoro secondario. Per saperne di più, consulta Passaggi paralleli e Iterazione.Il flusso di lavoro secondario viene richiamato utilizzando un connettore. A ogni iterazione del flusso di lavoro secondario viene passato l'argomento
iteration
. Il flusso di lavoro principale attende e memorizza il risultato di ogni esecuzione del flusso di lavoro secondario. Per ulteriori informazioni, vedi Connettore API Workflows Executions e Argomenti di runtime.Vengono restituiti i risultati dell'esecuzione. Per saperne di più, vedi Completare l'esecuzione di un flusso di lavoro.
Esegui il deployment del workflow:
Console
Nella console Google Cloud , vai alla pagina Workflows:
Fai clic su
Crea.Inserisci il nome,
workflow-parent
, per il nuovo flusso di lavoro.Nell'elenco Regione, seleziona us-central1.
Seleziona il service account che hai creato in precedenza.
Fai clic su Avanti.
Nell'editor del flusso di lavoro, incolla la definizione del flusso di lavoro principale.
Fai clic su Esegui il deployment.
gcloud
Crea un file di codice sorgente per il workflow:
touch workflow-parent.yaml
Apri il file del codice sorgente in un editor di testo e incolla la definizione del flusso di lavoro principale.
Esegui il deployment del workflow:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
SERVICE_ACCOUNT_NAME
con il nome del account di servizio che hai creato in precedenza.
Esegui il workflow principale
Esegui il workflow principale in modo che le chiamate al workflow secondario vengano eseguite in parallelo. L'esecuzione dovrebbe richiedere circa 10 secondi.
Console
Nella console Google Cloud , vai alla pagina Workflows:
Nella pagina Flussi di lavoro, fai clic sul workflow workflow-parent per accedere alla relativa pagina dei dettagli.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Visualizza i risultati del flusso di lavoro nel riquadro Output.
I risultati dovrebbero essere simili ai seguenti, che indicano errori con le iterazioni 2 e 4 e successo con le iterazioni 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
Esegui il workflow:
gcloud workflows run workflow-parent \ --location=us-central1
I risultati dovrebbero essere simili ai seguenti, che indicano errori con le iterazioni 2 e 4 e successo con le iterazioni 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
Hai creato e implementato correttamente un flusso di lavoro che richiama un flusso di lavoro secondario, esegue quattro iterazioni del flusso di lavoro secondario in rami paralleli e restituisce un indicatore di esito positivo o negativo per ogni esecuzione del flusso di lavoro secondario.