Questo tutorial mostra come utilizzare Cloud Scheduler per eseguire automaticamente i flussi di lavoro in modo che un flusso di lavoro venga eseguito in base a una pianificazione specifica, in questo caso ogni 5 minuti.
Obiettivi
- Crea ed esegui il deployment di un flusso di lavoro in grado di ricevere argomenti di runtime.
- Crea un job Cloud Scheduler che attiva il tuo flusso di lavoro ed lo esegue ogni cinque minuti, trasmettendo argomenti JSON nel formato corretto.
Costi
Questo tutorial utilizza 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
- Configura il tuo ambiente per Cloud Scheduler, inclusa la creazione di un'app App Engine.
-
Attiva l'API Workflows.
- Imposta la località predefinita utilizzata in questo tutorial:
gcloud config set workflows/location REGION
SostituisciREGION
con la località di Workflows che preferisci. - Crea un account di servizio da utilizzare per Workflows, ad esempio
sa-name
.gcloud iam service-accounts create sa-name
- Concedi al tuo account di servizio il ruolo
workflows.invoker
in modo che l'account sia autorizzato ad attivare il flusso di lavoro:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/workflows.invoker"
Sostituisci - Concedi il ruolo
logging.logWriter
all'account di servizio.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/logging.logWriter"
PROJECT_ID
con l'ID progetto Google Cloud.
Crea un flusso di lavoro che riceve argomenti di runtime
La definizione del flusso di lavoro consiste in una serie di passaggi descritti utilizzando la sintassi del flusso di lavoro, che può essere scritta in formato YAML o JSON. Dopo aver creato un flusso di lavoro, ne esegui il deployment per renderlo disponibile per l'esecuzione.
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro:
Fai clic su Crea.
Inserisci
myFirstWorkflow
come nome per il nuovo flusso di lavoro.Seleziona us-central1 per la regione.
Seleziona l'account di servizio creato in precedenza.
Tocca Next (Avanti).
Nell'editor del flusso di lavoro, inserisci la definizione seguente per il tuo flusso di lavoro.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Questo flusso di lavoro restituisce un saluto "Hello" a una persona il cui nome e cognome vengono passati come argomenti di runtime.
Fai clic su Esegui il deployment.
gcloud
- Apri un terminale.
Salva la seguente definizione del flusso di lavoro come file YAML o JSON, come myFirstWorkflow.yaml o myFirstWorkflow.json.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Questo flusso di lavoro restituisce un saluto "Hello" a una persona il cui nome e cognome vengono passati come argomenti di runtime.
Esegui il deployment del flusso di lavoro inserendo il seguente comando:
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
yaml_OR_json
conyaml
ojson
a seconda del formato del file di definizione dei flussi di lavoro creato in precedenza.
Pianifica il flusso di lavoro
Creare un job Cloud Scheduler che attiva il flusso di lavoro utilizzando l'account di servizio creato in precedenza.
Console
Nella console Google Cloud, vai alla pagina Cloud Scheduler:
Fai clic su Crea job.
Imposta il Nome su
my-workflow-job
.In Frequenza, inserisci:
*/5 * * * *
In Fuso orario, seleziona un paese e un fuso orario.
ad esempio United States and Los Angeles o Pacific Daylight Time (PDT).
Fai clic su Continua.
In Tipo target, seleziona HTTP.
In URL, inserisci:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
Lascia il metodo HTTP predefinito come POST.
Aggiungi le due intestazioni HTTP riportate di seguito:
- Nome:
Content-Type
e valore:application/octet-stream
- Nome:
User-Agent
e valore:Google-Cloud-Scheduler
- Nome:
In Corpo, inserisci:
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
Passa una codifica JSON degli argomenti del flusso di lavoro. In questo caso, il nome "Sherlock" e il cognome "Holmes". Le virgolette doppie all'interno della stringa sono precedute dal carattere di escape utilizzando le barre rovesciate (\).
Per l'intestazione Auth, seleziona Aggiungi token OAuth.
Inserisci l'account di servizio creato in precedenza.
sa-name@PROJECT_ID.iam.gserviceaccount.com
Non è necessario specificare l'ambito perché viene utilizzato il valore predefinitohttps://www.googleapis.com/auth/cloud-platform
.Accetta tutti gli altri valori predefiniti e fai clic su Crea.
gcloud
Per pianificare un job chiamato my-workflow-job
, inserisci questo comando:
gcloud scheduler jobs create http my-workflow-job \ --schedule="*/5 * * * *" \ --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \ --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \ --time-zone="America/Los_Angeles" \ --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"
L'intervallo viene definito utilizzando il formato unix-cron.
Il flag message-body
viene utilizzato per passare una codifica JSON degli argomenti del flusso di lavoro; in questo caso, il nome "Sherlock" e il cognome "Holmes". Le virgolette doppie all'interno della stringa sono precedute dal carattere di escape utilizzando le barre rovesciate (\).
Ora il tuo flusso di lavoro viene eseguito ogni 5 minuti.
Per ulteriori informazioni sui flag gcloud scheduler
e su come applicare il logging delle chiamate in modo che ogni passaggio di chiamata durante l'esecuzione del flusso di lavoro venga registrato, consulta Pianificare un flusso di lavoro e il riferimento gcloud
.
Esegui il job e verifica i risultati
Console
Nella console Google Cloud, vai alla pagina Cloud Scheduler:
Se il job non viene visualizzato, potresti dover aggiornare la pagina.
Per il job denominato
my-workflow-job
, fai clic su Esegui ora.Dovresti visualizzare l'aggiornamento del valore Risultato a Operazione riuscita.
Nella console Google Cloud, vai alla pagina Flussi di lavoro:
Dall'elenco dei flussi di lavoro, fai clic su myFirstWorkflow per aprire la pagina dei dettagli.
Lo stato di esecuzione del flusso di lavoro deve essere Riuscito.
Fai clic sull'ID dell'esecuzione del flusso di lavoro per aprire la pagina dei dettagli e visualizzare i risultati nel riquadro Output.
L'output dovrebbe essere "Hello, Sherlock Holmes!".
gcloud
Esegui il job Cloud Scheduler per eseguire il flusso di lavoro:
gcloud scheduler jobs run my-workflow-job
Recupera l'ID esecuzione per il flusso di lavoro:
gcloud workflows executions list myFirstWorkflow
L'output dovrebbe essere simile al seguente con l'ID esecuzione in grassetto:
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
Recupera i risultati dell'esecuzione del flusso di lavoro:
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
Sostituisci
EXECUTION_ID
con l'ID esecuzione restituito nel passaggio precedente.L'output dovrebbe essere simile al seguente:
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
Complimenti! Hai creato un job Cloud Scheduler che esegue automaticamente un flusso di lavoro in base a una pianificazione specifica.
Esegui la pulizia
Dopo aver completato il tutorial, puoi eseguire la pulizia delle risorse che hai creato, in modo che smettano di utilizzare la quota e che vengano addebitati dei costi. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.
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 Google Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina il job Cloud Scheduler
Vai alla pagina Cloud Scheduler nella console Google Cloud.
Seleziona la casella di controllo accanto al job.
Fai clic su Elimina nella parte superiore della pagina e conferma l'eliminazione.
Elimina il flusso di lavoro di Workflows
Vai alla pagina Flussi di lavoro nella console Google Cloud.
Seleziona il tuo flusso di lavoro.
Fai clic su Elimina nella parte superiore della pagina; digita il nome del flusso di lavoro e conferma l'eliminazione.
Disattiva l'applicazione App Engine
La disabilitazione di un'app App Engine impedisce alla tua applicazione di eseguire istanze e gestire richieste mantenendo i dati e le impostazioni dell'applicazione.
Vai alla pagina Impostazioni applicazione nella console Google Cloud.
Fai clic su Disabilita applicazione.
Segui le istruzioni.
Passaggi successivi
- Scopri di più sui flussi di lavoro.