Meneruskan argumen runtime dalam permintaan eksekusi

Anda dapat meneruskan argumen runtime dalam permintaan eksekusi alur kerja dan mengakses argumen tersebut menggunakan variabel alur kerja.

Menyiapkan alur kerja yang menerima argumen runtime

Untuk menyiapkan alur kerja guna menerima argumen runtime yang Anda teruskan sebagai bagian dari permintaan eksekusi, lakukan hal berikut:

  1. Ikuti langkah-langkah untuk membuat alur kerja baru, atau pilih alur kerja yang ada untuk diupdate, tetapi jangan deploy dulu.

  2. Tambahkan kolom params ke definisi alur kerja utama. Pastikan nama argumen ditempatkan di dalam tanda kurung siku, dan alur kerja utama ditempatkan dalam blok main:

    YAML

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

    JSON

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

    Blok main menerima satu argumen yang merupakan nama jenis data JSON yang valid; misalnya, array, objek, atau string.

    Sebagai praktik terbaik, meneruskan objek dengan beberapa argumen yang dinamai akan memudahkan Anda memahami tujuannya, dan menambahkan argumen. Anda juga dapat menggunakan notasi titik untuk mengakses argumen.

    Subalur kerja lainnya dapat memiliki beberapa argumen.

    Misalnya, alur kerja berikut menampilkan ucapan "Halo" kepada seseorang yang nama depan dan belakangnya Anda teruskan sebagai argumen 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}"
            }
          }
        ]
      }
    }
      
  3. Deploy alur kerja untuk menyelesaikan pembuatan atau pembaruannya.

Meneruskan data dalam permintaan eksekusi

Setelah alur kerja disiapkan untuk menerima argumen runtime, Anda dapat meneruskan string dalam format JSON, seperti {"firstName":"Workflows","lastName":"User"}, ke alur kerja dalam permintaan eksekusi.

Konsol

  1. Untuk menjalankan alur kerja, di konsol Google Cloud, buka halaman Workflows:

    Buka Workflows

  2. Di halaman Workflows, pilih alur kerja untuk membuka halaman detailnya.

  3. Di halaman Workflow Details, klik Execute.

  4. Di halaman "Execute workflow" yang ditampilkan, masukkan string JSON yang berisi nama parameter dan nilai argumen, seperti {"firstName":"Workflows","lastName":"User"}, ke area "Input":

    Area input diisi dengan contoh string JSON

  5. Klik Jalankan.

    Di halaman Detail eksekusi, Anda dapat melihat hasil eksekusi, termasuk output Hello, Workflows User!, ID dan status eksekusi, serta langkah saat ini atau akhir dari eksekusi alur kerja. Untuk mengetahui informasi selengkapnya, lihat Mengakses hasil eksekusi alur kerja.

gcloud

Tambahkan flag --data ke perintah gcloud workflows execute yang Anda gunakan untuk menjalankan alur kerja. Flag ini menggunakan string JSON data Anda. Misalnya, untuk meneruskan firstName dan lastName ke contoh alur kerja sebelumnya:

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

Ganti kode berikut:

  • WORKFLOW_NAME: nama alur kerja
  • FIRST: string yang ingin Anda teruskan ke alur kerja untuk firstName
  • LAST: string yang ingin Anda teruskan ke alur kerja untuk lastName

Outputnya akan mirip dengan berikut ini:

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

Library klien

Bergantung pada bahasa library klien, Anda dapat meneruskan argumen runtime dalam permintaan eksekusi.

Misalnya, menggunakan 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;

Atau, menggunakan Java:

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

Untuk informasi selengkapnya tentang cara menjalankan alur kerja menggunakan Library Klien Google API, lihat Menjalankan alur kerja.

REST API

  1. Tambahkan flag data ke perintah yang Anda gunakan untuk menjalankan alur kerja. Nilai data adalah string berformat JSON dengan argumen yang nilainya adalah satu atau beberapa pasangan parameter value yang di-escape. Misalnya, untuk meneruskan firstName dan lastName ke alur kerja contoh sebelumnya:

    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"

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda
    • WORKFLOW_NAME: nama alur kerja
    • FIRST: string yang ingin Anda teruskan ke alur kerja untuk firstName
    • LAST: string yang ingin Anda teruskan ke alur kerja untuk lastName

    Outputnya akan mirip dengan berikut ini:

    {
      "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. Untuk mendapatkan hasil eksekusi, jalankan perintah berikut:

    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"
    

    Ganti EXECUTION_ID dengan ID dari output yang ditampilkan perintah pertama Anda.

    Output ini berisi baris yang mirip dengan berikut ini:

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

Untuk informasi selengkapnya tentang cara menjalankan alur kerja menggunakan REST API, lihat Menjalankan alur kerja.

Mengakses argumen runtime

Contoh ini mengakses argumen runtime yang diteruskan ke alur kerja sebagai bagian dari permintaan eksekusi. Semua argumen disimpan dalam peta yang sama, yang dideklarasikan sebagai parameter alur kerja utama.

Saat menjalankan alur kerja ini, teruskan argumen runtime menggunakan format berikut:

{"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}"
        }
      }
    ]
  }
}

Anda dapat menggunakan default dengan fungsi library standar, map.get, untuk mengakses argumen runtime opsional, dan menampilkan nilai default jika kunci tidak ditemukan. Pada contoh berikut, jika region tidak ditentukan, northamerica-northeast1 akan digunakan:

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

Langkah selanjutnya