Transmitir argumentos de ambiente de execução em uma solicitação de execução

É possível transmitir argumentos de ambiente de execução em uma solicitação de execução de fluxo de trabalho e acessá-los usando variáveis de fluxo de trabalho.

Configurar um fluxo de trabalho que receba argumentos de ambiente de execução

Para configurar um fluxo de trabalho para receber argumentos de ambiente de execução transmitidos como parte de uma solicitação de execução, faça o seguinte:

  1. Siga as etapas para criar um novo fluxo de trabalho ou escolha um fluxo de trabalho atual para atualizar, mas não o implante ainda.

  2. Adicione um campo params à definição do fluxo de trabalho principal. Verifique se o nome do argumento está entre colchetes e se o fluxo de trabalho principal está em um bloco main:

    YAML

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

    JSON

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

    O bloco main aceita um único argumento que seja o nome de qualquer tipo de dados JSON válido. por exemplo, uma matriz, um objeto ou uma string.

    Como prática recomendada, transmitir um objeto com vários argumentos nomeados facilita a compreensão da finalidade e a adição de argumentos. Use a notação de ponto para acessar os argumentos.

    Outros subfluxos de trabalho podem ter vários argumentos.

    Por exemplo, esse fluxo de trabalho retorna uma saudação "Hello" para uma pessoa com nome e sobrenome que você transmite como argumentos de execução.

    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. Implante seu fluxo de trabalho para concluir a criação ou atualização.

Transmitir dados em uma solicitação de execução

Depois que o fluxo de trabalho estiver configurado para receber argumentos de ambiente de execução, é possível passar uma string no formato JSON, como {"firstName":"Workflows","lastName":"User"}, para o fluxo de trabalho em uma solicitação de execução.

Console

  1. Para executar um fluxo de trabalho, acesse a página Workflows no console do Google Cloud:

    Acessar fluxos de trabalho

  2. Na página Fluxos de trabalho, selecione um fluxo de trabalho para acessar a página de detalhes dele.

  3. Na página Detalhes do fluxo de trabalho, clique em Executar.

  4. Na página "Executar fluxo de trabalho", insira uma string JSON com os nomes dos parâmetros e os valores dos argumentos, como {"firstName":"Workflows","lastName":"User"}, na área Entrada:

    Área Entrada com a string JSON de exemplo

  5. Clique em Executar.

    Na página Detalhes da execução, é possível conferir os resultados da execução, incluindo a saída Hello, Workflows User!, o ID e o estado da execução e a etapa atual ou final da execução do fluxo de trabalho. Para mais informações, consulte Acessar os resultados da execução do fluxo de trabalho.

gcloud

Adicione a sinalização --data ao comando gcloud workflows execute usado para executar o fluxo de trabalho. Essa sinalização usa uma string JSON dos dados. Por exemplo, para transmitir firstName e lastName ao fluxo de trabalho do exemplo anterior:

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

Substitua:

  • WORKFLOW_NAME: o nome do fluxo de trabalho
  • FIRST: a string que você quer transmitir ao fluxo de trabalho para firstName
  • LAST: a string que você quer transmitir ao fluxo de trabalho para lastName

A saída será semelhante a esta:

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

Dependendo da linguagem da biblioteca de cliente, é possível transmitir um argumento de ambiente de execução em uma solicitação de execução.

Por exemplo, usando 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;

Ou, usando Java:

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

Para mais informações sobre como executar um fluxo de trabalho usando as bibliotecas de cliente da API do Google, consulte Executar um fluxo de trabalho.

API REST

  1. Anexe a sinalização data ao comando usado para executar o fluxo de trabalho. O valor de data é uma string em formato JSON com um argumento no valor de um ou mais pares de valor-parâmetro de escape. Por exemplo, para transmitir firstName e lastName para o fluxo de trabalho do exemplo 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"

    Substitua:

    • PROJECT_NUMBER: o número do projeto do Google Cloud.
    • WORKFLOW_NAME: o nome do fluxo de trabalho
    • FIRST: a string que você quer transmitir ao fluxo de trabalho para firstName
    • LAST: a string que você quer transmitir ao fluxo de trabalho para lastName

    A saída será semelhante a esta:

    {
      "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 ver os resultados, execute o seguinte 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"
    

    Substitua EXECUTION_ID pelo ID da saída retornada pelo seu primeiro comando.

    Essa saída inclui linhas semelhantes às seguintes:

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

Para mais informações sobre como executar um fluxo de trabalho usando a API REST, consulte Executar um fluxo de trabalho.

Acessar argumentos de ambiente de execução

Essa amostra acessa os argumentos do ambiente de execução transmitidos para o fluxo de trabalho como parte da solicitação de execução. Todos os argumentos são armazenados no mesmo mapa, declarados como um parâmetro do fluxo de trabalho principal.

Ao executar esse fluxo de trabalho, transmita argumentos de ambiente de execução usando o seguinte 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}"
        }
      }
    ]
  }
}

É possível usar default com a função de biblioteca padrão, map.get, para acessar argumentos de execução opcionais e retornar um valor padrão se a chave não for encontrada. No exemplo abaixo, se um region não for especificado, northamerica-northeast1 será usado:

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

A seguir