Pianificare i workflow

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

  1. Crea ed esegui il deployment di un workflow che può ricevere argomenti di runtime.
  2. Crea un job Cloud Scheduler che attiva il workflow 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 potrebbero avere diritto a una prova senza costi.

Prima di iniziare

  1. Configura l'ambiente per Cloud Scheduler, inclusa la creazione di un'app App Engine.
  2. Abilita l'API Workflows, se non è già abilitata.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilitare l'API

  3. Imposta la località predefinita utilizzata in questo tutorial:
      gcloud config set workflows/location REGION
    Sostituisci REGION con la località Workflows supportata che preferisci.
  4. Crea un account di servizio 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 disponga dell'autorizzazione per attivare il workflow:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/workflows.invoker"
  6. Sostituisci PROJECT_ID con l'ID progetto Google Cloud .
  7. Concedi il ruolo logging.logWriter al account di servizio.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/logging.logWriter"

Crea un workflow che riceve 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, ne esegui il deployment per renderlo disponibile per l'esecuzione.

Console

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

    Vai a Workflow

  2. Fai clic su Crea.

  3. Inserisci myFirstWorkflow come nome del nuovo workflow.

  4. Seleziona us-east1 come regione.

  5. Seleziona il account di servizio che hai creato in precedenza.

  6. Fai clic su Avanti.

  7. 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.

  8. Fai clic su Esegui il deployment.

gcloud

  1. Apri un terminale.
  2. Salva la seguente definizione del 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.

  3. Esegui il deployment del workflow inserendo il seguente comando:

    gcloud workflows deploy myFirstWorkflow \
        --location=us-east1 \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.

    Sostituisci yaml_OR_json con yaml o json a 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 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 Nome su my-workflow-job.

  4. In Regione, seleziona us-east1 (South Carolina).

  5. In Frequenza, inserisci:

    */5 * * * *
    In questo modo il job verrà eseguito ogni 5 minuti. L'intervallo viene definito utilizzando il formato unix-cron.

  6. In Fuso orario, seleziona un paese e un fuso orario.

    Ad esempio, seleziona Stati Uniti e Los Angeles o Ora legale del Pacifico (PDT).

  7. Fai clic su Continua.

  8. In Tipo di destinazione, seleziona HTTP.

  9. In URL, inserisci:

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

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

  11. Aggiungi le seguenti due intestazioni HTTP:

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

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

    In questo modo 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 barre rovesciate (\).

  13. In Intestazione autenticazione, seleziona Aggiungi un token OAuth.

  14. Inserisci il account di servizio che hai creato in precedenza.

    sa-name@PROJECT_ID.
    
    Non è necessario specificare l'Ambito, poiché viene utilizzato il valore predefinito https://www.googleapis.com/auth/cloud-platform.

  15. Accetta tutte le altre impostazioni predefinite 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 \
    --location="us-east1" \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-east1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID."

L'intervallo viene 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 precedute da un carattere di escape utilizzando le barre rovesciate (\).

Il workflow ora viene eseguito ogni 5 minuti.

Per saperne di più sui flag gcloud scheduler e su come applicare i registri chiamate in modo che ogni passaggio di chiamata durante l'esecuzione del workflow venga registrato, consulta Pianifica un workflow 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, potresti dover aggiornare la pagina.

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

    Dovresti vedere il valore Risultato aggiornato a Operazione riuscita.

  3. Nella console Google Cloud , vai alla pagina Workflows:

    Vai a Workflow

  4. Nell'elenco dei workflow, fai clic su myFirstWorkflow per aprire la relativa pagina dei dettagli.

    Lo stato di esecuzione del workflow deve essere Riuscito.

  5. 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

  1. Esegui il job Cloud Scheduler per eseguire il workflow:

    gcloud scheduler jobs run my-workflow-job --location="us-east1"
    
  2. 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-east1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. Recupera i risultati dell'esecuzione del workflow:

    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-east1/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

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:

  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 progetto, quindi 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.

Elimina il workflow di Workflows

  1. Vai alla pagina Workflows nella console Google Cloud .

    Vai a Workflow

  2. Seleziona il tuo workflow.

  3. Fai clic su Elimina nella parte superiore della pagina, digita il nome del workflow 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, mantenendo i dati e le impostazioni dell'applicazione.

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

    Vai alle impostazioni dell'applicazione

  2. Fai clic su Disabilita applicazione.

  3. Segui le istruzioni.

Passaggi successivi