Questo tutorial mostra come creare ed eseguire un flusso di lavoro principale che esegua più flussi di lavoro secondari in parallelo.
Nel diagramma seguente, quattro esecuzioni parallele del flusso di lavoro figlio sono richiamato. Ciò consente al flusso di lavoro padre di elaborare i dati in rami paralleli, e riduce il tempo di esecuzione complessivo. Il flusso di lavoro padre attende tutte le esecuzioni del flusso di lavoro figlio da completare prima di restituire un riepilogo esecuzioni non riuscite, semplificando il rilevamento di eventuali errori.
Obiettivi
In questo tutorial, imparerai a:
- Crea ed esegui il deployment di un flusso di lavoro secondario che riceve dati da un flusso di lavoro principale.
- Crea ed esegui il deployment di un flusso di lavoro principale che esegue più flussi di lavoro secondari utilizzando un loop
for
parallelo. - Esegui il flusso di lavoro padre che richiama le esecuzioni parallele dell'elemento figlio un flusso di lavoro di machine learning.
- I risultati di tutte le esecuzioni dei flussi di lavoro figlio riuscite e non riuscite vengono archiviati e restituiti in una mappa.
Puoi eseguire i comandi seguenti nella console Google Cloud o utilizzando Google Cloud CLI nel terminale o in Cloud Shell.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.
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
-
Crea ed esegui il deployment di un flusso di lavoro figlio
Un flusso di lavoro secondario può ricevere ed elaborare dati da un flusso di lavoro padre. Il bambino il flusso di lavoro lo dimostra nel seguente modo:
- Riceve un numero intero come argomento
- Va in sospensione per 10 secondi per simulare un'elaborazione
Restituisce un indicatore (a seconda che il numero intero sia dispari o pari) numero) per simulare l'esito positivo o negativo dell'esecuzione del flusso di lavoro
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro.
Fai clic su
Crea.Inserisci il nome
workflow-child
per il nuovo flusso di lavoro.Nell'elenco Regione, seleziona us-central1.
Seleziona l'Account di servizio creato in precedenza.
Fai clic su Avanti.
Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo flusso di lavoro:
Fai clic su Esegui il deployment.
gcloud
Crea un file di codice sorgente per il flusso di lavoro:
touch workflow-child.yaml
Apri il file del codice sorgente in un editor di testo e copia quanto segue flusso di lavoro personalizzato per il file.
Esegui il deployment del flusso di lavoro:
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 dell'account di servizio creato in precedenza.
Crea ed esegui il deployment del flusso di lavoro padre
Il flusso di lavoro padre esegue più rami del flusso di lavoro figlio utilizzando un
loop for
parallelo.
Copia il codice sorgente della definizione del flusso di lavoro. Si tratta di parti seguenti:
Una mappa viene utilizzata per archiviare i risultati delle esecuzioni dei flussi di lavoro secondari. Per ulteriori informazioni, consulta Maps.
Un ciclo
for
viene eseguito in parallelo per richiamare il flusso di lavoro secondario. Per ulteriori informazioni, consulta Passaggi paralleli e Iterazione.Il flusso di lavoro secondario viene invocato utilizzando un connettore. Ogni iterazione al flusso di lavoro figlio viene passato l'argomento
iteration
. Il flusso di lavoro principale aspetta e memorizza il risultato di ogni esecuzione del flusso di lavoro secondario. Per maggiori informazioni le informazioni, vedi Connettore API Workflows Executions e Argomenti di runtime.Vengono restituiti i risultati dell'esecuzione. Per ulteriori informazioni, consulta Completare l'esecuzione di un flusso di lavoro.
Esegui il deployment del flusso di lavoro:
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro:
Fai clic su
Crea.Inserisci il nome,
workflow-parent
, per il nuovo flusso di lavoro.Nell'elenco Regione, seleziona us-central1.
Seleziona l'Account di servizio 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 tuo flusso di lavoro:
touch workflow-parent.yaml
Apri il file del codice sorgente in un editor di testo e incolla la definizione per il flusso di lavoro padre.
Esegui il deployment del flusso di lavoro:
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 dell'account di servizio creato in precedenza.
Esegui il flusso di lavoro padre
Esegui il flusso di lavoro principale in modo che le invocazioni del flusso di lavoro secondario vengano eseguite in parallelo. Il completamento delle esecuzioni dovrebbe richiedere circa 10 secondi.
Console
Nella console Google Cloud, vai a Workflows pagina:
Nella pagina Flussi di lavoro, fai clic sul flusso di lavoro workflow-parent per accedere alla relativa pagina dei dettagli.
Nella pagina Dettagli flusso di lavoro, 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, indicando errori con le iterazioni 2 e 4 e il 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 flusso di lavoro:
gcloud workflows run workflow-parent \ --location=us-central1
I risultati dovrebbero essere simili ai seguenti e indicare errori relativi a le iterazioni 2 e 4 e il 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 ed eseguito correttamente il deployment di un flusso di lavoro che richiama un asset figlio un flusso di lavoro secondario, esegue quattro iterazioni del flusso di lavoro figlio in rami paralleli e restituisce un indicatore di riuscita o meno per l'esecuzione di ogni flusso di lavoro figlio.
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione creato per il tutorial.
Per eliminare il progetto:
- 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.
Elimina le risorse del tutorial
Elimina i flussi di lavoro creati in questo tutorial:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Passaggi successivi
- Per ulteriori informazioni sulla sintassi di Workflows, consulta il riferimento sulla sintassi di Workflows.
- Per scoprire di più sui connettori Workflows, consulta Informazioni sui connettori.