Puoi passare gli argomenti di runtime in una richiesta di esecuzione del flusso di lavoro e accedere a questi argomenti utilizzando le variabili del flusso di lavoro.
Configura un flusso di lavoro che riceve argomenti di runtime
Per configurare un flusso di lavoro per ricevere argomenti di runtime che viene passato come parte di una richiesta di esecuzione, segui questi passaggi:
Segui i passaggi per creare un nuovo flusso di lavoro o scegli un flusso di lavoro esistente per aggiornarlo, ma non eseguirne ancora il deployment.
Aggiungi un campo
params
alla definizione del flusso di lavoro principale. Assicurati che il nome dell'argomento sia racchiuso tra parentesi quadre e che il flusso di lavoro principale sia posizionato in un bloccomain
:YAML
main: params: [ARG_NAME] steps: ...
JSON
{ "main": { "params": ["ARG_NAME"], "steps": [ ... ] ... } }
Il blocco
main
accetta un singolo argomento che è il nome di qualsiasi tipo di dati JSON valido, ad esempio un array, un oggetto o una stringa.Come best practice, passare un oggetto con più argomenti denominati aiuta a comprendere il loro scopo e ad aggiungere argomenti. Puoi quindi utilizzare la notazione dei punti per accedere agli argomenti.
Altri flussi di lavoro secondari possono avere più argomenti.
Ad esempio, il seguente flusso di lavoro restituisce un saluto "Hello" a una persona il cui nome e cognome trasmessi 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}" } } ] } }
Esegui il deployment del tuo flusso di lavoro per completare la creazione o l'aggiornamento del flusso.
Trasmettere 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, ad esempio {"firstName":"Workflows","lastName":"User"}
, al flusso di lavoro in una richiesta di esecuzione.
Console
Per eseguire un flusso di lavoro, vai alla pagina Flussi di lavoro nella console Google Cloud:
Nella pagina Flussi di lavoro, seleziona un flusso di lavoro per accedere alla relativa pagina dei dettagli.
Nella pagina Dettagli flusso di lavoro, fai clic su play_arrow Esegui.
Nella pagina "Esegui flusso di lavoro" visualizzata, inserisci una stringa JSON contenente i nomi e i valori degli argomenti, ad esempio
{"firstName":"Workflows","lastName":"User"}
, nell'area "Input":Fai clic su Execute (Esegui).
Nella pagina Dettagli esecuzione, puoi visualizzare i risultati dell'esecuzione, inclusi l'output
Hello, Workflows User!
, l'ID esecuzione e lo stato, nonché il passaggio corrente 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 flussi di esecuzione esegui che utilizzi per eseguire il tuo flusso di lavoro. Questo flag richiede una stringa JSON dei dati. Ad esempio, per passare firstName
e lastName
al flusso di lavoro dell'esempio precedente:
gcloud workflows run WORKFLOW_NAME \ --data='{"firstName":"FIRST","lastName":"LAST"}'
Sostituisci quanto segue:
WORKFLOW_NAME
: il nome del flusso di lavoroFIRST
: la stringa che vuoi trasferire al tuo flusso di lavorofirstName
LAST
: la stringa che vuoi trasferire al tuo flusso di lavorolastName
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, con 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 Eseguire un flusso di lavoro.
API REST
Aggiungi il flag
data
al comando che utilizzi per eseguire il tuo flusso di lavoro. Il valore didata
è 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 un elementofirstName
elastName
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_ID/locations/us-central1/workflows/WORKFLOW_NAME/executions"
Sostituisci quanto segue:
PROJECT_ID
: nome del progettoWORKFLOW_NAME
: il nome del flusso di lavoroFIRST
: la stringa che vuoi trasferire al tuo flusso di lavoro perfirstName
LAST
: la stringa che vuoi trasferire al tuo flusso di lavoro perlastName
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" } ```
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_ID/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"
Sostituisci
EXECUTION_ID
con l'ID dell'output restituito dal primo comando.L'output contiene righe simili alle seguenti:
"argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}", "result": "\"Hello, Workflows User!\"",
Per ulteriori informazioni sull'esecuzione di un flusso di lavoro con l'API REST, consulta Eseguire un flusso di lavoro.
Accedi ad argomenti di runtime
Questo esempio accede agli argomenti di runtime passati al flusso di lavoro come parte della richiesta di esecuzione. Tutti gli argomenti vengono archiviati nella stessa mappa, dichiarata come parametro del flusso di lavoro principale.
Quando esegui questo flusso di lavoro, trasmetti gli argomenti di runtime utilizzando il formato seguente:
{"firstName":"Sherlock", "lastName":"Holmes"}
YAML
JSON
Puoi utilizzare default
con la funzione di 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\")}" } ] } } ] } }