Puedes transferir argumentos del entorno de ejecución en una solicitud de ejecución de un flujo de trabajo y acceder a esos argumentos mediante variables de flujo de trabajo.
Configurar un flujo de trabajo que reciba argumentos de tiempo de ejecución
Para configurar un flujo de trabajo que reciba los argumentos del entorno de ejecución que le transfieras como parte de una solicitud de ejecución, haz lo siguiente:
Sigue los pasos para crear un flujo de trabajo o elige uno que ya tengas para actualizarlo, pero no lo implementes todavía.
Añade un campo
params
a la definición del flujo de trabajo principal. Asegúrate de que el nombre del argumento esté entre corchetes y de que el flujo de trabajo principal esté en un bloquemain
:YAML
main: params: [ARG_NAME] steps: ...
JSON
{ "main": { "params": ["ARG_NAME"], "steps": [ ... ] ... } }
El bloque
main
acepta un único argumento, que es el nombre de cualquier tipo de datos JSON válido; por ejemplo, una matriz, un objeto o una cadena.Como práctica recomendada, pasar un objeto con varios argumentos con nombre facilita la comprensión de su finalidad y la adición de argumentos. También puedes usar la notación de puntos para acceder a los argumentos.
Otros subflujos de trabajo pueden tener varios argumentos.
Por ejemplo, el siguiente flujo de trabajo devuelve el saludo "Hola" a una persona cuyo nombre y apellido se pasan como argumentos de tiempo de ejecución:
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}" } } ] } }
Implementa el flujo de trabajo para terminar de crearlo o actualizarlo.
Transferir datos en una solicitud de ejecución
Una vez que tu flujo de trabajo esté configurado para recibir argumentos de tiempo de ejecución, puedes enviar una cadena en formato JSON, como {"firstName":"Workflows","lastName":"User"}
, al flujo de trabajo en una solicitud de ejecución.
Consola
Para ejecutar un flujo de trabajo, ve a la página Flujos de trabajo de la Google Cloud consola:
En la página Flujos de trabajo, selecciona un flujo de trabajo para ir a su página de detalles.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
En la página "Ejecutar flujo de trabajo" que se muestra, introduce una cadena JSON que contenga los nombres de los parámetros y los valores de los argumentos, como
{"firstName":"Workflows","lastName":"User"}
, en el área "Entrada":Haz clic en la opción para ejecutar.
En la página Detalles de la ejecución, puede ver los resultados de la ejecución, incluida la salida
Hello, Workflows User!
, el ID y el estado de la ejecución, y el paso actual o final de la ejecución del flujo de trabajo. Para obtener más información, consulta Acceder a los resultados de la ejecución de un flujo de trabajo.
gcloud
Añade la marca --data al comando gcloud workflows execute que usas para ejecutar el flujo de trabajo. Este indicador toma una cadena JSON de tus datos. Por ejemplo, para enviar firstName
y lastName
al flujo de trabajo del ejemplo anterior, haz lo siguiente:
gcloud workflows run WORKFLOW_NAME \ --data='{"firstName":"FIRST","lastName":"LAST"}'
Haz los cambios siguientes:
WORKFLOW_NAME
: el nombre del flujo de trabajoFIRST
: la cadena que quieres transferir a tu flujo de trabajo parafirstName
LAST
: la cadena que quieres transferir a tu flujo de trabajo paralastName
La salida debería ser similar a la siguiente:
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
Bibliotecas de cliente
Según el lenguaje de la biblioteca de cliente, puedes transferir un argumento del entorno de ejecución en una solicitud de ejecución.
Por ejemplo, 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;
También puedes usar Java:
// Creates the execution object.
CreateExecutionRequest request =
CreateExecutionRequest.newBuilder()
.setParent(parent.toString())
.setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
.build();
Para obtener más información sobre cómo ejecutar un flujo de trabajo con las bibliotecas de cliente de las APIs de Google, consulta Ejecutar un flujo de trabajo.
API REST
Añade la marca
data
al comando que usas para ejecutar tu flujo de trabajo. El valor dedata
es una cadena con formato JSON que incluye un argumento cuyo valor es uno o varios pares de valor de parámetro con caracteres de escape. Por ejemplo, para pasarfirstName
ylastName
al flujo de trabajo del ejemplo anterior, haz lo siguiente: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"
Haz los cambios siguientes:
PROJECT_NUMBER
: tu Google Cloud proyecto numberWORKFLOW_NAME
: el nombre del flujo de trabajoFIRST
: la cadena que quieres enviar a tu flujo de trabajo parafirstName
LAST
: la cadena que quieres enviar a tu flujo de trabajo paralastName
La salida debería ser similar a la siguiente:
{ "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" } ```
Para obtener los resultados de la ejecución, ejecuta el siguiente 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"
Sustituye
EXECUTION_ID
por el ID que ha devuelto el primer comando.Esta salida contiene líneas similares a las siguientes:
"argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}", "result": "\"Hello, Workflows User!\"",
Para obtener más información sobre cómo ejecutar un flujo de trabajo mediante la API REST, consulta Ejecutar un flujo de trabajo.
Acceder a los argumentos del tiempo de ejecución
En este ejemplo se accede a los argumentos del entorno de ejecución que se transfieren al flujo de trabajo como parte de la solicitud de ejecución. Todos los argumentos se almacenan en el mismo mapa, declarado como parámetro del flujo de trabajo principal.
Cuando ejecutes este flujo de trabajo, introduce los argumentos de tiempo de ejecución con el siguiente formato:
{"firstName":"Sherlock", "lastName":"Holmes"}
YAML
JSON
Puedes usar default
con la función de biblioteca estándar map.get para acceder a argumentos de tiempo de ejecución opcionales y devolver un valor predeterminado si no se encuentra la clave. En el siguiente ejemplo, si no se especifica ningún region
, se usa 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\")}" } ] } } ] } }