Transmita argumentos de tempo de execução num pedido de execução

Pode transmitir argumentos de tempo de execução num pedido de execução do fluxo de trabalho e aceder a esses argumentos através de variáveis do fluxo de trabalho.

Configure um fluxo de trabalho que receba argumentos de tempo de execução

Para configurar um fluxo de trabalho para receber argumentos de tempo de execução que lhe transmite como parte de um pedido de execução, faça o seguinte:

  1. Siga os passos para criar um novo fluxo de trabalho ou escolha um fluxo de trabalho existente para o atualizar, mas não o implemente ainda.

  2. Adicione um campo params à definição do fluxo de trabalho principal. Certifique-se de que o nome do argumento está entre parênteses retos e que o fluxo de trabalho principal está num bloco main:

    YAML

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

    JSON

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

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

    Como prática recomendada, a transmissão de um objeto com vários argumentos com nomes facilita a compreensão da respetiva finalidade e a adição de argumentos. Em seguida, também pode usar a notação de ponto para aceder aos argumentos.

    Outros subfluxos de trabalho podem ter vários argumentos.

    Por exemplo, o fluxo de trabalho seguinte devolve a saudação "Olá" a uma pessoa cujo nome próprio e apelido transmite como argumentos de tempo 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. Implemente o fluxo de trabalho para concluir a criação ou a atualização.

Transmita dados num pedido de execução

Depois de configurar o fluxo de trabalho para receber argumentos de tempo de execução, pode transmitir uma string no formato JSON, como {"firstName":"Workflows","lastName":"User"}, para o fluxo de trabalho num pedido de execução.

Consola

  1. Para executar um fluxo de trabalho, na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

  2. Na página Fluxos de trabalho, selecione um fluxo de trabalho para aceder à respetiva página de detalhes.

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

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

    Área de entrada preenchida com a string JSON de exemplo

  5. Clique em Executar.

    Na página Detalhes da execução, pode ver os resultados da execução, incluindo o resultado Hello, Workflows User!, o ID de execução e o estado, bem como o passo atual ou final da execução do fluxo de trabalho. Para mais informações, consulte o artigo Aceda aos resultados da execução do fluxo de trabalho.

gcloud

Adicione a flag --data ao comando gcloud workflows execute que usa para executar o fluxo de trabalho. Esta flag recebe uma string JSON dos seus dados. Por exemplo, para transmitir um firstName e um lastName para o fluxo de trabalho do exemplo anterior:

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

Substitua o seguinte:

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

O resultado deve ser semelhante ao seguinte:

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

Consoante a linguagem da biblioteca cliente, pode transmitir um argumento de tempo de execução num pedido 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; 

Em alternativa, 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 a execução de um fluxo de trabalho através das bibliotecas cliente de APIs Google, consulte o artigo Executar um fluxo de trabalho.

API REST

  1. Anexe a flag data ao comando que usa para executar o seu fluxo de trabalho. O valor de data é uma string formatada em JSON com um argumento cujo valor é um ou mais pares parâmetro-valor com carateres de escape. Por exemplo, para transmitir um firstName e um lastName ao 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 o seguinte:

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

    O resultado deve ser semelhante ao seguinte:

    {   "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 obter os resultados da execução, 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 do resultado devolvido pelo primeiro comando.

    Esta saída contém linhas semelhantes às seguintes:

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

Para mais informações sobre a execução de um fluxo de trabalho através da API REST, consulte o artigo Executar um fluxo de trabalho.

Aceda aos argumentos de tempo de execução

Este exemplo acede aos argumentos de tempo de execução transmitidos ao fluxo de trabalho como parte do pedido de execução. Todos os argumentos são armazenados no mesmo mapa, declarado como um parâmetro do fluxo de trabalho principal.

Quando executar este fluxo de trabalho, transmita argumentos de tempo de execução com 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}"         }       }     ]   } }

Pode usar default com a função da biblioteca padrão map.get para aceder a argumentos de tempo de execução opcionais e devolver um valor predefinido se a chave não for encontrada. No exemplo seguinte, se não for especificado um region, é usado 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\")}"               }             ]           }         }       ]     }   }

O que se segue?