Pianifica flussi di lavoro


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 particolare, in questo caso ogni 5 minuti.

Obiettivi

  1. Crea ed esegui il deployment di un flusso di lavoro che può ricevere argomenti di runtime.
  2. Crea un job Cloud Scheduler che attivi il flusso di lavoro e lo esegue 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. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

  1. Configura il tuo ambiente per Cloud Scheduler, inclusa la creazione di un'app App Engine.
  2. Attiva l'API Workflows.

    Abilita l'API

  3. Imposta la località predefinita utilizzata in questo tutorial:
      gcloud config set workflows/location REGION
    Sostituisci REGION con la località di Workflows supportata a tua scelta.
  4. Crea un account di servizio da utilizzare per Workflows, ad esempio sa-name.
      gcloud iam service-accounts create sa-name
  5. Concedi al tuo account di servizio il ruolo workflows.invoker in modo che l'account abbia l'autorizzazione per 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"
  6. Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
  7. 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"

Crea un flusso di lavoro che riceve argomenti di runtime

Una definizione di flusso di lavoro è composta da una serie di passaggi descritti utilizzando la sintassi dei flussi 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

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

    Vai a Workflows

  2. Fai clic su Crea.

  3. Inserisci myFirstWorkflow come nome per il nuovo flusso di lavoro.

  4. Seleziona us-central1 per la regione.

  5. Seleziona l'account di servizio creato in precedenza.

  6. Tocca Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la seguente definizione del 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 "Ciao" a una persona di cui passi il nome e il cognome come argomenti di runtime.

  8. Fai clic su Esegui il deployment.

gcloud

  1. Apri un terminale.
  2. 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 "Ciao" a una persona di cui passi il nome e il cognome come argomenti di runtime.

  3. Esegui il deployment del flusso di lavoro inserendo questo comando:

    gcloud workflows deploy myFirstWorkflow \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    Sostituisci yaml_OR_json con yaml o json a seconda del formato del file di definizione Workflows creato in precedenza.

Pianifica il flusso di lavoro

Crea un job Cloud Scheduler che attivi il flusso di lavoro utilizzando l'account di servizio creato in precedenza.

Console

  1. Nella console Google Cloud, vai alla pagina Cloud Scheduler:

    Vai a Cloud Scheduler

  2. Fai clic su Crea job.

  3. Imposta il Nome su my-workflow-job.

  4. Per Frequenza, inserisci:

    */5 * * * *
    Il job verrà eseguito ogni 5 minuti. L'intervallo è definito utilizzando il formato unix-cron.

  5. Per Fuso orario, seleziona un paese e un fuso orario.

    Ad esempio, seleziona Stati Uniti e Los Angeles o Pacific Daylight Time (PDT).

  6. Fai clic su Continua.

  7. In Tipo di destinazione, seleziona HTTP.

  8. In URL, inserisci:

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. Lascia il metodo HTTP impostato sul valore predefinito POST.

  10. Aggiungi le seguenti due intestazioni HTTP:

    • Nome: Content-Type e valore: application/octet-stream
    • Nome: User-Agent e valore: Google-Cloud-Scheduler
  11. Per Corpo, inserisci:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    Questo passa una codifica JSON degli argomenti del flusso di lavoro; in questo caso, il nome, "Sherlock", e il cognome, "Holmes". Le virgolette all'interno della stringa vengono convertite in caratteri di escape utilizzando le barre rovesciate (\).

  12. In Intestazione autorizzazione, seleziona Aggiungi token OAuth.

  13. 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 predefinito https://www.googleapis.com/auth/cloud-platform.

  14. 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 flusso di lavoro; in questo caso, il nome "Sherlock" e il cognome "Holmes". Le virgolette all'interno della stringa sono convertite in caratteri di escape utilizzando 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 della 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

  1. Nella console Google Cloud, vai alla pagina Cloud Scheduler:

    Vai a Cloud Scheduler

    Se il job non viene visualizzato, potrebbe essere necessario aggiornare la pagina.

  2. Per il job denominato my-workflow-job, fai clic su Esegui ora.

    Il valore di Result dovrebbe essere aggiornato in Success.

  3. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

    Vai a Workflows

  4. Dall'elenco dei flussi di lavoro, fai clic su myFirstWorkflow per aprire la relativa pagina dei dettagli.

    Lo stato di esecuzione del flusso di lavoro deve essere Riuscito.

  5. Fai clic sull'ID esecuzione del flusso di lavoro per aprire la pagina dei dettagli e visualizzare i risultati del flusso di lavoro nel riquadro di output.

    L'output dovrebbe essere "Hello, Sherlock Holmes!".

gcloud

  1. Esegui il job Cloud Scheduler per eseguire il flusso di lavoro:

    gcloud scheduler jobs run my-workflow-job
    
  2. Recupera l'ID esecuzione per il tuo 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
  3. 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 particolare.

Esegui la pulizia

Al termine del tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che smettano di utilizzare la quota e non incorrano in addebiti. Le sezioni seguenti 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:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina il job Cloud Scheduler

  1. Vai alla pagina Cloud Scheduler nella console Google Cloud.

    Vai a Cloud Scheduler

  2. Seleziona la casella di controllo accanto al job.

  3. Fai clic su Elimina nella parte superiore della pagina e conferma l'eliminazione.

Eliminazione del flusso di lavoro di Workflows

  1. Vai alla pagina Flussi di lavoro nella console Google Cloud.

    Vai a Workflows

  2. Seleziona il tuo flusso di lavoro.

  3. Fai clic su Elimina nella parte superiore della pagina; digita il nome del flusso di lavoro e conferma l'eliminazione.

Disabilita l'app App Engine

La disattivazione di un'app App Engine impedisce all'applicazione di eseguire istanze e gestire le richieste, conservando al contempo i dati e le impostazioni dell'applicazione.

  1. Vai alla pagina Impostazioni applicazione nella console Google Cloud.

    Vai a Impostazioni applicazione

  2. Fai clic su Disabilita applicazione.

  3. Segui le istruzioni.

Passaggi successivi