Passare gli argomenti di runtime in una richiesta di esecuzione

Puoi passare gli argomenti di runtime in una richiesta di esecuzione del flusso di lavoro e accedervi utilizzando le variabili del flusso di lavoro.

Configura un flusso di lavoro che riceve argomenti di runtime

Per impostare un flusso di lavoro in modo da ricevere gli argomenti di runtime che passi al flusso di lavoro come parte di una richiesta di esecuzione, segui questi passaggi:

  1. Segui i passaggi per creare un nuovo flusso di lavoro o scegli un flusso di lavoro esistente da aggiornare, ma non eseguirne ancora il deployment.

  2. Aggiungi un campo params alla definizione del flusso di lavoro principale. Assicurati che il nome dell'argomento sia inserito tra parentesi quadre e che il flusso di lavoro principale sia inserito in un blocco main:

    YAML

    main:
      params: [ARG_NAME]
      steps:
        ...
    

    JSON

    {
      "main": {
        "params": ["ARG_NAME"],
        "steps": [
          ...
        ]
        ...
      }
    }
      

    Il blocco main accetta un singolo argomento che corrisponde al nome di qualsiasi tipo di dati JSON valido, ad esempio un array, un oggetto o una stringa.

    Come best practice, trasferire un oggetto con più argomenti con nome semplifica la comprensione del loro scopo e l'aggiunta di argomenti. Puoi anche utilizzare la notazione punto per accedere agli argomenti.

    Altri flussi di lavoro secondari possono avere più argomenti.

    Ad esempio, il seguente flusso di lavoro restituisce un saluto "Ciao" a una persona il cui nome e cognome vengono passati come argomenti di runtime:

    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}"
            }
          }
        ]
      }
    }
      
  3. Esegui il deployment del tuo flusso di lavoro per completarne la creazione o l'aggiornamento.

Passare i dati in una richiesta di esecuzione

Dopo aver configurato il flusso di lavoro per ricevere argomenti di runtime, puoi passare una stringa in formato JSON, come {"firstName":"Workflows","lastName":"User"}, al flusso di lavoro in una richiesta di esecuzione.

Console

  1. Per eseguire un flusso di lavoro, nella console Google Cloud vai alla pagina Flussi di lavoro:

    Vai a Workflows

  2. Nella pagina Flussi di lavoro, seleziona un flusso di lavoro per andare alla relativa pagina dei dettagli.

  3. Nella pagina Dettagli flusso di lavoro, fai clic su Esegui.

  4. Nella pagina "Esegui flusso di lavoro" visualizzata, inserisci una stringa JSON contenente i nomi dei parametri e i valori degli argomenti, come {"firstName":"Workflows","lastName":"User"}, nell'area "Input":

    Area di input compilata con la stringa JSON di esempio

  5. Fai clic su Execute (Esegui).

    Nella pagina Dettagli esecuzione, puoi visualizzare i risultati dell'esecuzione, inclusi l'output Hello, Workflows User!, l'ID e lo stato dell'esecuzione e il passaggio attuale o finale dell'esecuzione del flusso di lavoro. Per ulteriori informazioni, consulta Accedere ai risultati dell'esecuzione del flusso di lavoro.

gcloud

Aggiungi il flag --data al comando gcloud controls eseguite che utilizzi per eseguire il flusso di lavoro. Questo flag accetta una stringa JSON dei tuoi dati. Ad esempio, per passare firstName e lastName al flusso di lavoro di esempio precedente:

gcloud workflows run WORKFLOW_NAME \
--data='{"firstName":"FIRST","lastName":"LAST"}'

Sostituisci quanto segue:

  • WORKFLOW_NAME: il nome del flusso di lavoro
  • FIRST: la stringa che vuoi passare al flusso di lavoro per firstName
  • LAST: la stringa che vuoi passare al flusso di lavoro per lastName

L'output dovrebbe essere simile al seguente:

Waiting for execution [9379b067-306a-4db1-a58d-c9fc99aebfd4] to complete...done.
argument: '{"firstName":"Workflows","lastName":"User"}'
endTime: '2022-07-19T13:52:47.659199466Z'
name: projects/1051295516635/locations/us-central1/workflows/workflow-6/executions/9379b067-306a-4db1-a58d-c9fc99aebfd4
result: '"Hello, Workflows User!"'
startTime: '2022-07-19T13:52:47.623862835Z'
state: SUCCEEDED
status:
  currentSteps:
  - routine: main
    step: step2
workflowRevisionId: 000002-138

Librerie client

A seconda del linguaggio della libreria client, puoi passare un argomento di runtime in una richiesta di esecuzione.

Ad esempio, utilizzando JavaScript:

// Execute workflow
try {
  const createExecutionRes = await client.createExecution({
    parent: client.workflowPath(projectId, location, workflow),
    execution: {
      argument: JSON.stringify({"firstName":"Workflows","lastName":"User"})
    }
});
const executionName = createExecutionRes[0].name;

Oppure, utilizzando Java:

// Creates the execution object.
CreateExecutionRequest request =
    CreateExecutionRequest.newBuilder()
        .setParent(parent.toString())
        .setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
        .build();

Per ulteriori informazioni sull'esecuzione di un flusso di lavoro utilizzando le librerie client delle API di Google, consulta Esecuzione di un flusso di lavoro.

API REST

  1. Aggiungi il flag data al comando che utilizzi per eseguire il flusso di lavoro. Il valore di data è una stringa in formato JSON con un argomento il cui valore è una o più coppie parametro-valore con caratteri di escape. Ad esempio, per passare firstName e lastName al flusso di lavoro di esempio precedente:

    curl --request POST \
       --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
       --header 'Content-Type: application/json' \
       --data '{"argument":"{\"firstName\":\"FIRST\",\"lastName\":\"LAST\"}"}' \
       "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions"
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del tuo progetto Google Cloud
    • WORKFLOW_NAME: il nome del flusso di lavoro
    • FIRST: la stringa che vuoi passare al flusso di lavoro per firstName
    • LAST: la stringa che vuoi passare al flusso di lavoro per lastName

    L'output dovrebbe essere simile al seguente:

    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID",
      "startTime": "2020-11-09T23:51:31.765761331Z",
      "state": "ACTIVE",
      "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
      "workflowRevisionId": "000001-08c"
    }
     ```
    
  2. Per ottenere i risultati dell'esecuzione, esegui questo comando:

    curl --request GET \
       --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
       --header 'Content-Type: application/json' \
       "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"
    

    Sostituisci EXECUTION_ID con l'ID dell'output restituito dal primo comando.

    Questo output contiene righe simili alle seguenti:

    "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
    "result": "\"Hello, Workflows User!\"",
    

Per saperne di più sull'esecuzione di un flusso di lavoro utilizzando l'API REST, consulta Esecuzione di un flusso di lavoro.

Accedi agli argomenti di runtime

Questo esempio accede agli argomenti di runtime passati al flusso di lavoro come parte della richiesta di esecuzione. Tutti gli argomenti sono archiviati nella stessa mappa, dichiarati come parametro del flusso di lavoro principale.

Quando esegui questo flusso di lavoro, trasmetti gli argomenti di runtime utilizzando il seguente formato:

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

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}"
        }
      }
    ]
  }
}

Puoi utilizzare default con la funzione libreria standard map.get per accedere agli argomenti di runtime facoltativi e restituire un valore predefinito se la chiave non viene trovata. Nell'esempio seguente, se region non è specificato, viene utilizzato northamerica-northeast1:

YAML

  main:
      params: [input]
      steps:
      - init:
          assign:
            - region: ${default(map.get(input, "region"), "northamerica-northeast1")}
  

JSON

  {
    "main": {
      "params": [
        "input"
      ],
      "steps": [
        {
          "init": {
            "assign": [
              {
                "region": "${default(map.get(input, \"region\"), \"northamerica-northeast1\")}"
              }
            ]
          }
        }
      ]
    }
  }

Passaggi successivi