Questo tutorial mostra come creare una coda Cloud Tasks in grado di regolare la velocità di esecuzione dei workflow.
Esiste un numero massimo di esecuzioni del flusso di lavoro attive che possono verificarsi contemporaneamente. Una volta esaurita questa quota e se
il backlog di esecuzione
è disattivato o se viene raggiunta la quota per le esecuzioni in backlog, le nuove
esecuzioni non vanno a buon fine e viene restituito un codice di stato HTTP 429 Too many requests
. Se attivi una coda Cloud Tasks per eseguire i flussi di lavoro secondari alla velocità che definisci, puoi evitare problemi relativi alle quote di Workflows e ottenere una velocità di esecuzione migliore.
Tieni presente che Cloud Tasks è progettato per fornire la consegna "at least once"; tuttavia, Workflows non garantisce l'elaborazione "exactly-once" delle richieste duplicate da Cloud Tasks.
Nel seguente diagramma, un workflow principale richiama workflow secondari regolati da una coda Cloud Tasks a cui è applicata una frequenza di invio.
Obiettivi
In questo tutorial, imparerai a:
- Crea una coda di attività Cloud Tasks che funge da intermediario tra i flussi di lavoro padre e figlio.
- Crea ed esegui il deployment di un flusso di lavoro secondario che riceve dati dal flusso di lavoro principale.
- Crea ed esegui il deployment del flusso di lavoro principale che esegue il flusso di lavoro secondario tramite la coda di attività Cloud Tasks.
- Esegui il workflow principale senza un limite di velocità di distribuzione, che richiama le esecuzioni del workflow secondario.
- Applica un limite di invio alla coda Cloud Tasks ed esegui il flusso di lavoro principale.
- Osserva che i flussi di lavoro secondari vengono eseguiti alla velocità definita tramite la coda Cloud Tasks.
Puoi eseguire i seguenti comandi nella console Google Cloud o utilizzando Google Cloud CLI nel terminale o in Cloud Shell.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, 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.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, 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.enable
permission. Learn how to grant roles. - Nella console Google Cloud , vai alla pagina IAM per impostare
le autorizzazioni per il account di servizio
predefinito di Compute Engine.
Prendi nota dell'Account di servizio predefinito di Compute Engine, in quanto lo assocerai ai flussi di lavoro in questo tutorial a scopo di test. Questo account di servizio viene creato automaticamente dopo l'attivazione o l'utilizzo di un servizio Google Cloud che utilizza Compute Engine e con il seguente formato email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sostituisci
PROJECT_NUMBER
con il numero del tuo progettoGoogle Cloud . Puoi trovare il numero di progetto nella pagina Benvenuto della console Google Cloud .Per gli ambienti di produzione, ti consigliamo vivamente di creare un nuovo service account e di concedergli uno o più ruoli IAM che contengano le autorizzazioni minime richieste e di seguire il principio del privilegio minimo.
- Seleziona il account di servizio predefinito di Compute Engine e, nella stessa riga, fai clic su Modifica entità.
- Nella finestra di dialogo visualizzata, fai clic su
- Nell'elenco Seleziona un ruolo, seleziona Workflows > Workflows Invoker in modo che l'account abbia l'autorizzazione per attivare l'esecuzione del flusso di lavoro.
- Nell'elenco Seleziona un ruolo, seleziona Cloud Tasks > Cloud Tasks Enqueuer in modo che l'account abbia l'autorizzazione per creare attività.
Aggiungi un altro ruolo e aggiungi i
seguenti ruoli:
- Fai clic su Salva.
gcloud
-
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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, 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.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, 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.enable
permission. Learn how to grant roles. Prendi nota dell'Account di servizio predefinito di Compute Engine, in quanto lo assocerai ai flussi di lavoro in questo tutorial a scopo di test. Questo account di servizio viene creato automaticamente dopo l'attivazione o l'utilizzo di un servizio Google Cloud che utilizza Compute Engine e con il seguente formato email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sostituisci
PROJECT_NUMBER
con il numero del tuo progettoGoogle Cloud . Puoi trovare il numero di progetto eseguendo questo comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Per gli ambienti di produzione, ti consigliamo vivamente di creare un nuovo service account e di concedergli uno o più ruoli IAM che contengano le autorizzazioni minime richieste e di seguire il principio del privilegio minimo.
- Concedi il
ruolo Invoker di Workflows
(
roles/workflows.invoker
) sul progetto all'account di servizio predefinito Compute Engine in modo che l'account abbia l'autorizzazione per attivare l'esecuzione del workflow.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Sostituisci quanto segue:
PROJECT_ID
: l' Google Cloud ID progettoPROJECT_NUMBER
: il Google Cloud numero di progetto
- Concedi il
ruolo Cloud Tasks Enqueuer
(
roles/cloudtasks.enqueuer
) sul progetto al account di servizio Compute Engine predefinito in modo che l'account abbia l'autorizzazione per creare attività.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Crea una coda di attività Cloud Tasks
Crea una coda di attività Cloud Tasks che puoi utilizzare nel workflow principale e che ti consente di regolare la frequenza di esecuzione dei workflow.
Console
Nella console Google Cloud , vai alla pagina Cloud Tasks:
Fai clic su
Crea coda in modalità push.Inserisci il nome della coda,
queue-workflow-child
.Nell'elenco Regione, seleziona us-central1 (Iowa).
Fai clic su Crea.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Crea ed esegui il deployment di un flusso di lavoro secondario
Un workflow secondario può ricevere ed elaborare i dati di un workflow principale. Crea ed esegui il deployment di un flusso di lavoro secondario che:
- Riceve un
iteration
come argomento - Si mette in pausa per 10 secondi per simulare l'elaborazione
Restituisce una stringa in caso di esecuzione riuscita
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 (Iowa).
Nell'elenco Service account, seleziona il service account predefinito di Compute Engine.
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=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
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
.
Copia il codice sorgente che definisce il workflow principale:
Il flusso di lavoro è costituito dalle seguenti parti:
Una mappa utilizzata per assegnare costanti che fanno riferimento al workflow secondario e al nome della coda Cloud Tasks. Per ulteriori informazioni, consulta la sezione Maps.
Un ciclo
for
che viene eseguito per richiamare il flusso di lavoro secondario in modo iterativo. Per ulteriori informazioni, vedi Iterazione.Un passaggio del flusso di lavoro che crea e aggiunge un numero elevato di attività alla coda Cloud Tasks per eseguire il flusso di lavoro secondario. Per ulteriori informazioni, vedi Connettore API Cloud Tasks.
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 (Iowa).
Nell'elenco Service account, seleziona il service account predefinito di Compute Engine.
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=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Esegui il workflow principale senza limiti di frequenza
Esegui il workflow principale per richiamare i workflow secondari tramite la coda Cloud Tasks. 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.
Mentre il workflow principale è in esecuzione, torna alla pagina Workflow e fai clic sul workflow workflow-child per accedere alla pagina dei dettagli.
Fai clic sulla scheda Esecuzioni.
Dovresti vedere le esecuzioni del flusso di lavoro secondario, eseguite all'incirca nello stesso momento, simili a quelle riportate di seguito:
gcloud
Esegui il workflow:
gcloud workflows run workflow-parent \ --location=us-central1
Per verificare che sia stata attivata un'esecuzione del workflow, elenca le ultime quattro esecuzioni:
gcloud workflows executions list workflow-child --limit=4
Poiché il numero di esecuzioni (100) è inferiore al limite di concorrenza di Workflows, i risultati dovrebbero essere simili ai seguenti. Potrebbero verificarsi problemi di quota se invii migliaia di esecuzioni contemporaneamente.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
Hai creato e sottoposto a deployment un workflow che richiama 100 iterazioni del workflow secondario.
Esegui il flusso di lavoro principale con limitazioni di frequenza
Applica un limite di frequenza di un invio al secondo alla coda Cloud Tasks ed esegui il flusso di lavoro principale.
Console
Nella console Google Cloud , vai alla pagina Cloud Tasks:
Fai clic su queue-workflow-child, la coda Cloud Tasks che hai creato, e poi su Modifica coda.
Nella sezione Limiti di frequenza per invii di attività, nel campo Invii massimi, digita 1.
Fai clic su Salva.
Vai alla pagina Workflows:
Fai clic sul flusso di lavoro workflow-parent per accedere alla pagina dei dettagli.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Mentre il workflow principale è in esecuzione, torna alla pagina Workflow e fai clic sul workflow workflow-child per accedere alla pagina dei dettagli.
Fai clic sulla scheda Esecuzioni.
Dovresti visualizzare le esecuzioni del flusso di lavoro secondario, in esecuzione a una richiesta al secondo, simile alla seguente:
gcloud
Aggiorna la coda Cloud Tasks per applicare un limite di frequenza di un invio al secondo:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Esegui il workflow:
gcloud workflows run workflow-parent \ --location=us-central1
Per verificare che sia stata attivata un'esecuzione del workflow, elenca le ultime quattro esecuzioni:
gcloud workflows executions list workflow-child --limit=4
I risultati dovrebbero essere simili ai seguenti, con un flusso di lavoro eseguito al secondo:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
Hai eseguito il deployment di un workflow che richiama 100 iterazioni del workflow secondario con una velocità di invio di un'esecuzione al secondo.
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 è eliminare il progetto 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.
Eliminare le risorse del tutorial
Elimina i flussi di lavoro e le risorse Cloud Tasks creati in questo tutorial:
Console
Per eliminare i flussi di lavoro:
Nella console Google Cloud , vai alla pagina Workflows:
Nell'elenco dei flussi di lavoro, fai clic su un flusso di lavoro per accedere alla pagina Dettagli del flusso di lavoro.
Fai clic su
Elimina.Digita il nome del flusso di lavoro e fai clic su Conferma.
Per eliminare la coda Cloud Tasks:
Nella console Google Cloud , vai alla pagina Cloud Tasks:
Seleziona il nome della coda che vuoi eliminare e fai clic su Elimina coda.
Conferma l'azione.
gcloud
Per eliminare i flussi di lavoro, esegui questi comandi:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Per eliminare la coda Cloud Tasks, esegui questo comando:
gcloud tasks queues delete queue-workflow-child
Passaggi successivi
- Per scoprire di più su come utilizzare Cloud Tasks per mettere in coda un flusso di lavoro ed eseguirlo in modo asincrono, consulta Mettere in coda le esecuzioni del flusso di lavoro utilizzando Cloud Tasks.
- Per scoprire di più sulla sintassi di Workflows, consulta i riferimenti alla sintassi di Workflows.