Questo tutorial mostra come creare una coda Cloud Tasks che possono regolare la frequenza di esecuzioni del flusso di lavoro.
Esiste un numero massimo di esecuzioni di flussi di lavoro attivi che possono avvenire contemporaneamente. Una volta esaurita questa quota, se la coda di esecuzione è disattivata o se viene raggiunta la quota per le esecuzioni in coda, tutte le nuove esecuzioni non vanno a buon fine con un codice di stato HTTP 429 Too many requests
. Se consenti a una coda Cloud Tasks di eseguire flussi di lavoro secondari a una frequenza che hai definito, puoi evitare problemi relativi alle quote di Workflows e ottenere una frequenza di esecuzione migliore.
Tieni presente che Cloud Tasks è progettato per fornire la consegna "almeno una volta". Tuttavia, Workflows non garantisce l'elaborazione esattamente una volta delle richieste duplicate da Cloud Tasks.
Nel seguente diagramma, un flusso di lavoro principale richiama i flussi di lavoro secondari regolati da una coda Cloud Tasks a cui è applicata una frequenza di invio.
Obiettivi
In questo tutorial, imparerai a:
- Crea una coda di Cloud Tasks che agisce da intermediario tra i flussi di lavoro principali e secondari.
- Crea ed esegui il deployment di un flusso di lavoro secondario che riceve i 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 Cloud Tasks.
- Eseguire il flusso di lavoro padre senza un limite di frequenza di invio, che richiama più esecuzioni del flusso di lavoro figlio.
- Applica un limite di invio alla coda Cloud Tasks ed esegui il flusso di lavoro principale.
- Osserva che i flussi di lavoro figlio vengono eseguiti alla velocità definita attraverso di Cloud Tasks.
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 Cloud Tasks, Compute Engine, and Workflows APIs.
-
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 Cloud Tasks, Compute Engine, and Workflows APIs.
- Nella console Google Cloud, vai alla pagina IAM per impostare
delle autorizzazioni per i Compute Engine
l'account di servizio predefinito.
Prendi nota dell'account di servizio predefinito di Compute Engine, poiché lo assocerai ai flussi di lavoro in questo tutorial a scopo di test. Questo account di servizio viene creato automaticamente dopo aver attivato o utilizzato 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 progetto Google Cloud. Puoi trovare il numero del progetto nella pagina Welcome della console Google Cloud.Per gli ambienti di produzione, ti consigliamo vivamente di creare un nuovo account di servizio e di assegnargli uno o più ruoli IAM contenenti le autorizzazioni minime richieste e di seguire il principio del privilegio minimo.
- seleziona l'account di servizio predefinito di Compute Engine e fai clic su Modifica entità.
- Nella finestra di dialogo che compare, fai clic su
- Nell'elenco Seleziona un ruolo, seleziona Workflow > Richiedente flussi di lavoro in modo che l'account abbia l'autorizzazione per attivare l'esecuzione del flusso di lavoro.
- Nell'elenco Seleziona un ruolo, scegli Cloud Tasks > In coda di Cloud Tasks in modo che dispone dell'autorizzazione per creare attività.
Aggiungi un altro ruolo e aggiungi il ruolo
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.
- 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 Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com - 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 Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com Prendi nota di Compute Engine predefinito, così come lo assocerai ai flussi di lavoro in questo tutorial a scopo di test. Questo account di servizio viene automaticamente creato dopo l'abilitazione o l'utilizzo di un servizio Google Cloud che usa Compute Engine e con il seguente formato email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto Google Cloud. Puoi trovare il numero del tuo progetto esegui questo comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Per gli ambienti di produzione, consigliamo vivamente creazione di un nuovo account di servizio e la concessione di uno o più ruoli IAM contenenti autorizzazioni minime richieste e seguono il principio della privilegio minimo.
- Concedi il
ruolo Invoker di Workflows
(
roles/workflows.invoker
) al progetto per l'account di servizio predefinito di Compute Engine in modo che l'account abbia la permissione di attivare l'esecuzione del flusso di lavoro.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'ID progetto Google CloudPROJECT_NUMBER
: il numero del progetto Google Cloud
- Concedi
Ruolo Accodatore di Cloud Tasks
(
roles/cloudtasks.enqueuer
) del progetto alla di account di servizio predefinito Compute Engine, in modo che l'account abbia autorizzazione necessaria 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 Cloud Tasks che puoi utilizzare nel flusso di lavoro principale e che ti consente di regolare la frequenza delle esecuzioni del flusso di lavoro.
Console
Nella console Google Cloud, vai a Cloud Tasks. pagina:
Fai clic su
Crea coda in modalità push.Inserisci il Nome 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 figlio
Un flusso di lavoro secondario può ricevere ed elaborare i dati di un flusso di lavoro principale. Crea ed esegui il deployment di un flusso di lavoro secondario che:
- Riceve un
iteration
come argomento - Dormi per 10 secondi per simulare l'elaborazione
Restituisce una stringa al termine dell'esecuzione riuscita
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 (Iowa).
Nell'elenco Account di servizio, seleziona il Service account predefinito di Compute Engine.
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 tuo 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=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Crea ed esegui il deployment del flusso di lavoro principale
Il flusso di lavoro padre esegue più rami del flusso di lavoro figlio utilizzando un
for
ciclo.
Copia il codice sorgente che definisce il flusso di lavoro padre:
Il flusso di lavoro è costituito dai seguenti componenti:
Una mappa utilizzata per assegnare costanti che fanno riferimento al flusso di lavoro figlio e il nome della coda di Cloud Tasks. Per ulteriori informazioni, vedi Maps.
Un loop
for
che viene eseguito per richiamare il flusso di lavoro figlio in modo iterativo. Per ulteriori informazioni, consulta la sezione 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, consulta il connettore dell'API Cloud Tasks.
Esegui il deployment del flusso di lavoro:
Console
Nella console Google Cloud, vai a Workflows pagina:
Fai clic su
Crea.Inserisci il nome
workflow-parent
per il nuovo flusso di lavoro.Nell'elenco Regione, seleziona us-central1 (Iowa).
Nell'elenco Account di servizio, 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 padre.
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 di codice sorgente in un editor di testo e incolla la definizione per il flusso di lavoro principale.
Esegui il deployment del flusso di lavoro:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Esegui il flusso di lavoro padre senza limiti di frequenza
Esegui il flusso di lavoro principale per richiamare i flussi di lavoro secondari tramite la coda Cloud Tasks. Le esecuzioni dovrebbero richiedere circa 10 secondi.
Console
Nella console Google Cloud, vai a Workflows pagina:
Nella pagina Flussi di lavoro, fai clic sul pulsante 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.
Mentre il flusso di lavoro padre è in esecuzione, torna a Flussi di lavoro e fai clic sul pulsante workflow-child per passare alla relativa pagina dei dettagli.
Fai clic sulla scheda Esecuzioni.
Dovresti vedere le esecuzioni del flusso di lavoro secondario, in esecuzione nello stesso periodo di tempo, simili al seguente:
gcloud
Esegui il flusso di lavoro:
gcloud workflows run workflow-parent \ --location=us-central1
Per verificare che sia stata attivata un'esecuzione di un flusso di lavoro, elenca le ultime quattro esecuzioni:
gcloud workflows executions list workflow-child --limit=4
Poiché il numero di esecuzioni (100) è inferiore al limite di concorrenza dei flussi di lavoro, i risultati dovrebbero essere simili ai seguenti. 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 ed eseguito il deployment di un flusso di lavoro che richiama 100 iterazioni del flusso di lavoro secondario.
Esegui il flusso di lavoro padre con i limiti di frequenza
Applica un limite di frequenza di un invio al secondo alla coda Cloud Tasks e poi 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à, per Nel campo Numero massimo di invii, digita 1.
Fai clic su Salva.
Vai alla pagina Flussi di lavoro:
Fai clic sul flusso di lavoro workflow-parent per passare alla relativa pagina dei dettagli.
Nella pagina Dettagli flusso di lavoro, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
Mentre il flusso di lavoro padre è in esecuzione, torna a Flussi di lavoro e fai clic sul pulsante workflow-child per passare alla relativa pagina dei dettagli.
Fai clic sulla scheda Esecuzioni.
Dovresti vedere le esecuzioni del flusso di lavoro figlio, in esecuzione su una singola richiesta al secondo, in modo simile al 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 flusso di lavoro:
gcloud workflows run workflow-parent \ --location=us-central1
Per verificare che sia stata attivata un'esecuzione di un flusso di lavoro, 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 per 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 correttamente il deployment di un flusso di lavoro che richiama 100 iterazioni del flusso di lavoro figlio con una frequenza 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 mantenerlo senza l'aggiunta delle modifiche In questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai 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 e le risorse di Cloud Tasks creati in questo tutorial:
Console
Per eliminare i flussi di lavoro:
Nella console Google Cloud, vai a Workflows pagina:
Nell'elenco dei flussi di lavoro, fai clic su un flusso di lavoro per andare 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 di Cloud Tasks:
Nella console Google Cloud, vai alla pagina Cloud Tasks:
Seleziona il nome della coda da 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 eseguirelo in modo asincrono, consulta Mettere in coda le esecuzioni dei flussi di lavoro utilizzando Cloud Tasks.
- Per ulteriori informazioni sulla sintassi di Workflows, consulta il riferimento sulla sintassi di Workflows.