Workflows ti consentono di fornire input dinamici a un'esecuzione utilizzando argomenti di runtime, a cui il workflow accede tramite variabili. In questo modo, puoi adattare la logica di esecuzione ed elaborare payload di eventi variabili senza modificare la definizione del flusso di lavoro.
Configura un workflow che riceve argomenti di runtime
Per configurare un flusso di lavoro in modo da ricevere gli argomenti di runtime che gli trasmetti nell'ambito di una richiesta di esecuzione, procedi nel seguente modo:
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.
Aggiungi un campo
paramsalla definizione del workflow principale. Assicurati che il nome dell'argomento sia racchiuso tra parentesi quadre e che il flusso di lavoro principale sia inserito in un bloccomain:YAML
main: params: [ARG_NAME] steps: ...
JSON
{ "main": { "params": ["ARG_NAME"], "steps": [ ... ] ... } }
Il blocco
mainaccetta un singolo argomento, ovvero il nome di qualsiasi tipo di dati JSON valido, ad esempio un array, un oggetto o una stringa.Come best practice, il passaggio di un oggetto con più argomenti denominati facilita la comprensione del loro scopo e l'aggiunta di argomenti. Puoi anche utilizzare la notazione con il punto per accedere agli argomenti.
Altri flussi di lavoro secondari possono avere più argomenti.
Ad esempio, il seguente flusso di lavoro restituisce il saluto "Hello" 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}" } } ] } }
Esegui il deployment del workflow per completare la creazione o l'aggiornamento.
Trasferire dati in una richiesta di esecuzione
Una volta configurato il workflow per ricevere gli argomenti di runtime, puoi passare una stringa
in formato JSON, ad esempio
{"firstName":"Workflows","lastName":"User"}, al workflow in una
richiesta di esecuzione.
Console
Per eseguire un flusso di lavoro, nella console Google Cloud , vai alla pagina Workflow:
Nella pagina Workflow, seleziona un workflow per accedere alla pagina dei dettagli.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Nella pagina "Esegui flusso di lavoro" visualizzata, inserisci una stringa JSON contenente i nomi dei parametri e i valori degli argomenti, ad esempio
{"firstName":"Workflows","lastName":"User"}, nell'area "Input":
Fai clic su 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 corrente o finale dell'esecuzione del flusso di lavoro. Per maggiori informazioni, consulta Accedere ai risultati dell'esecuzione del workflow.
gcloud
Aggiungi il flag --data al comando gcloud workflows execute che utilizzi per eseguire il flusso di lavoro. Questo flag accetta una stringa JSON dei tuoi dati. Ad esempio, per passare un firstName e un lastName al
workflow di esempio precedente:
gcloud workflows run WORKFLOW_NAME \ --data='{"firstName":"FIRST","lastName":"LAST"}'
Sostituisci quanto segue:
WORKFLOW_NAME: il nome del workflowFIRST: la stringa che vuoi passare al workflow perfirstNameLAST: la stringa che vuoi passare al workflow perlastName
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;
In alternativa, utilizzando Java:
// Creates the execution object.
CreateExecutionRequest request =
CreateExecutionRequest.newBuilder()
.setParent(parent.toString())
.setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
.build();
Per saperne di più 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
dataal comando che utilizzi per eseguire il flusso di lavoro. Il valore didataè una stringa formattata in JSON con un argomento il cui valore è una o più coppie parametro-valore con escape. Ad esempio, per trasmettere unfirstNamee unlastNameal workflow 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 tuo Google Cloud numero di progettoWORKFLOW_NAME: il nome del workflowFIRST: la stringa che vuoi passare al tuo flusso di lavoro perfirstNameLAST: la stringa che vuoi passare 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_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"Sostituisci
EXECUTION_IDcon 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 ulteriori informazioni sull'esecuzione di un flusso di lavoro utilizzando l'API REST, vedi Eseguire un flusso di lavoro.
Accedere agli argomenti di runtime
Questo esempio accede agli argomenti runtime passati al flusso di lavoro nell'ambito 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, passa gli argomenti di runtime utilizzando il seguente formato:
{"firstName":"Sherlock", "lastName":"Holmes"}
YAML
JSON
Puoi utilizzare default con la funzione della 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 non viene specificato un region,
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\")}" } ] } } ] } }