Cómo pasar argumentos del entorno de ejecución en una solicitud de ejecución

Puedes pasar argumentos de entorno de ejecución en una solicitud de ejecución de flujo de trabajo y acceder a ellos con variables de flujo de trabajo.

Configura un flujo de trabajo que reciba argumentos del entorno de ejecución

Para configurar un flujo de trabajo que reciba argumentos de entorno de ejecución que le pases como parte de una solicitud de ejecución, haz lo siguiente:

  1. Sigue los pasos para crear un flujo de trabajo nuevo o elegir uno existente para update, pero aún no la implementas.

  2. Agrega un campo params a la definición del flujo de trabajo principal. Asegúrate de que los el nombre del argumento se coloca entre corchetes y que el flujo de trabajo principal colocado en un bloque main:

    YAML

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

    JSON

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

    El bloque main acepta un solo argumento que es el nombre de cualquier JSON válido. el tipo de datos, por ejemplo, un array, un objeto o una cadena.

    Como práctica recomendada, pasar un objeto con varios argumentos con nombre facilitar la comprensión de su propósito y agregar argumentos. Luego, puedes usa 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 muestra un mensaje “Hello” saludo a una persona cuyo nombre y apellido pasas como argumentos del entorno 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}"
            }
          }
        ]
      }
    }
      
  3. Implementa tu flujo de trabajo para terminar de crearlo o actualizarlo.

Pasa datos en una solicitud de ejecución

Una vez que tu flujo de trabajo esté configurado para recibir argumentos de entorno de ejecución, puedes pasar una cadena en formato JSON, como {"firstName":"Workflows","lastName":"User"}, al flujo de trabajo en una solicitud de ejecución.

Console

  1. Para ejecutar un flujo de trabajo, en la consola de Google Cloud, ve a Página Flujos de trabajo:

    Ir a Workflows

  2. En la página Flujos de trabajo, selecciona un flujo de trabajo para ir a su en la página de detalles.

  3. En la página Detalles del flujo de trabajo, haz clic en Ejecución.

  4. En la página "Execute workflow" que se muestra, ingresa una cadena JSON con los nombres de los parámetros y los valores de los argumentos, como {"firstName":"Workflows","lastName":"User"}, en el área "Input":

    Área de entrada propagada con la cadena JSON de ejemplo

  5. Haz clic en Ejecutar.

    En la página Detalles de la ejecución, puedes ver los resultados de la ejecución, incluido el Hello, Workflows User! de salida, el ID de ejecución y el estado, y el paso actual o final de la ejecución del flujo de trabajo. Para más información, consulta Accede a los resultados de la ejecución del flujo de trabajo.

gcloud

Agrega el argumento --data marca a la gcloud flujos de trabajo de ejecución comando que usas para ejecutar tu flujo de trabajo. Esta marca toma un valor JSON cadena de tus datos. Por ejemplo, para pasar un firstName y un lastName al flujo de trabajo de ejemplo anterior, haz lo siguiente:

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

Reemplaza lo siguiente:

  • WORKFLOW_NAME: Es el nombre del flujo de trabajo.
  • FIRST: Es la cadena que deseas pasar a tu flujo de trabajo. firstName
  • LAST: Es la cadena que deseas pasar a tu flujo de trabajo. lastName

El resultado debería ser similar al siguiente ejemplo:

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 cliente

Según el lenguaje de la biblioteca cliente, puedes pasar 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;

O, con 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 la ejecución de un flujo de trabajo con el Bibliotecas cliente de las APIs de Google, consulta Ejecuta un flujo de trabajo.

API de REST

  1. Agrega la marca data al comando que usas para ejecutar la en el flujo de trabajo. El valor de data es una cadena con formato JSON con un argumento cuyo valor es uno o más pares de valores de parámetros escapados. Por ejemplo, para Pasa un firstName y una lastName al flujo de trabajo de ejemplo anterior:

    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"

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.
    • WORKFLOW_NAME: El nombre del flujo de trabajo
    • FIRST: Es la cadena que deseas pasar a tu flujo de trabajo para firstName
    • LAST: Es la cadena que deseas pasar a tu flujo de trabajo para lastName

    El resultado debería ser similar al siguiente ejemplo:

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

    Reemplaza EXECUTION_ID por el ID del resultado que mostró tu primer comando.

    Este resultado 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 con la API de REST, consulta Ejecuta un flujo de trabajo.

Accede a argumentos del entorno de ejecución

Esta muestra accede a los argumentos del entorno de ejecución que se pasan al flujo de trabajo como parte del solicitud de ejecución. Todos los argumentos se almacenan en el mismo mapa, declarados como un parámetro del flujo de trabajo principal.

Cuando ejecutes este flujo de trabajo, pasa argumentos del entorno de ejecución con el siguiente 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}"
        }
      }
    ]
  }
}

Puedes usar default con la función de biblioteca estándar. map.get, para acceder argumentos de entorno de ejecución opcionales y mostrar un valor predeterminado si la clave no es encontradas. En el siguiente ejemplo, si no se especifica un 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\")}"
              }
            ]
          }
        }
      ]
    }
  }

¿Qué sigue?