Questo tutorial mostra come utilizzare Cloud Scheduler per eseguire automaticamente Workflows in modo che un workflow venga eseguito in base a una pianificazione specifica, in questo caso ogni 5 minuti.
Obiettivi
- Crea ed esegui il deployment di un workflow in grado di ricevere argomenti di runtime.
- Crea un job Cloud Scheduler che attivi il workflow e lo esegua ogni 5 minuti, passando gli argomenti JSON nel formato corretto.
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
- Configura l'ambiente per Cloud Scheduler, inclusa la creazione di un'app App Engine.
Abilita l'API Workflows.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.- Imposta la località predefinita utilizzata in questo tutorial:
Sostituiscigcloud config set workflows/location REGION
REGIONcon la località Workflows supportata che preferisci. - Crea un account di servizio per Workflows, ad esempio,
sa-name.gcloud iam service-accounts create sa-name
- Concedi al account di servizio il ruolo
workflows.invokerin modo che l' account abbia l'autorizzazione per attivare il workflow: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.logWriteral 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 workflow che riceva argomenti di runtime
Una definizione di workflow è costituita da una serie di passaggi descritti utilizzando la sintassi di Workflows, che può essere scritta in formato YAML o JSON. Dopo aver creato un workflow, esegui il deployment per renderlo disponibile per l'esecuzione.
Console
Nella Google Cloud console, vai alla pagina Workflow:
Fai clic su Crea.
Inserisci
myFirstWorkflowcome nome per il nuovo workflow.Seleziona us-central1 per la regione.
Seleziona il account di servizio che hai creato in precedenza.
Fai clic su Avanti.
Nell'editor del workflow, inserisci la seguente definizione per il workflow.
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 workflow restituisce un saluto "Hello" a una persona di cui passi il nome e il cognome come argomenti di runtime.
Fai clic su Esegui il deployment.
gcloud
- Apri un terminale.
Salva la seguente definizione di workflow come file YAML o JSON, ad esempio 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 workflow restituisce un saluto "Hello" a una persona di cui passi il nome e il cognome come argomenti di runtime.
Esegui il deployment del workflow 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_jsonconyamlojsona seconda del formato del file di definizione di Workflows che hai creato in precedenza.
Pianifica il workflow
Crea un job Cloud Scheduler che attivi il workflow utilizzando il service account che hai creato in precedenza.
Console
Nella Google Cloud console, vai alla pagina Cloud Scheduler:
Fai clic su Crea job.
Imposta Nome su
my-workflow-job.In Frequenza, inserisci:
Il job verrà eseguito ogni 5 minuti. L'intervallo è definito utilizzando il formato unix-cron.*/5 * * * *In Fuso orario, seleziona un paese e un fuso orario.
Ad esempio, seleziona Stati Uniti e Los Angeles o Ora legale del Pacifico (PDT).
Fai clic su Continua.
In Tipo di target, seleziona HTTP.
In URL, inserisci:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
Lascia il Metodo HTTP al valore predefinito POST.
Aggiungi le seguenti due intestazioni HTTP:
- Nome:
Content-Typee Valore:application/octet-stream - Nome:
User-Agente Valore:Google-Cloud-Scheduler
- Nome:
In Corpo, inserisci:
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}Viene passata una codifica JSON degli argomenti del workflow; in questo caso, il nome, "Sherlock", e il cognome, "Holmes". Le virgolette doppie all'interno della stringa vengono sottoposte a escape utilizzando le barre rovesciate (\).
In Intestazione di autenticazione, seleziona Aggiungi un token OAuth.
Inserisci il account di servizio che hai creato in precedenza.
Non devi specificare l'ambito perché viene utilizzato il valore predefinitosa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform.Accetta tutti gli altri valori predefiniti e fai clic su Crea.
gcloud
Pianifica un job denominato my-workflow-job inserendo il seguente 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 è definito utilizzando il formato unix-cron.
Il flag message-body viene utilizzato per passare una codifica JSON degli argomenti del workflow; in questo caso, il nome, "Sherlock", e il cognome, "Holmes". Le virgolette doppie all'interno della stringa vengono sottoposte a escape
utilizzando le barre rovesciate (\).
Il workflow viene eseguito ogni 5 minuti.
Per saperne di più sui flag gcloud scheduler, nonché su come applicare
la registrazione delle chiamate in modo che ogni passaggio di chiamata durante l'esecuzione del workflow venga
registrato, consulta Pianificare un workflow e il
gcloud riferimento.
Esegui il job e verifica i risultati
Console
Nella Google Cloud console, 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 vedere il valore Risultato aggiornato a Successo.
Nella Google Cloud console, vai alla pagina Workflow:
Nell'elenco dei workflow, fai clic su myFirstWorkflow per aprire la pagina dei dettagli.
Lo stato di esecuzione del workflow dovrebbe essere Riuscito.
Fai clic sull'ID esecuzione del workflow per aprire la pagina dei dettagli e visualizzare i risultati del workflow nel riquadro Output.
L'output dovrebbe essere "Hello, Sherlock Holmes!".
gcloud
Esegui il job Cloud Scheduler per eseguire il workflow:
gcloud scheduler jobs run my-workflow-job
Recupera l'ID esecuzione del workflow:
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 workflow:
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
Sostituisci
EXECUTION_IDcon 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 correttamente un job Cloud Scheduler che esegue automaticamente un workflow in base a una pianificazione specifica.
Esegui la pulizia
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che non utilizzino più la quota generando addebiti. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- Nella 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 progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina il job Cloud Scheduler
Vai alla pagina Cloud Scheduler nella Google Cloud console.
Seleziona la casella di controllo accanto al job.
Fai clic su Elimina nella parte superiore della pagina e conferma l'eliminazione.
Elimina il workflow Workflows
Vai alla pagina Workflow nella Google Cloud console.
Seleziona il workflow.
Fai clic su Elimina nella parte superiore della pagina, digita il nome del workflow e conferma l'eliminazione.
Disabilita l'app App Engine
La disabilitazione di un'app App Engine impedisce all'applicazione di eseguire istanze e gestire le richieste, mantenendo al contempo i dati e le impostazioni dell'applicazione.
Vai alla pagina Impostazioni applicazione nella Google Cloud console.
Fai clic su Disabilita applicazione.
Segui le istruzioni.
Passaggi successivi
- Scopri di più su Workflows.