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 sudah ada untuk memperbarui, tetapi jangan men-deploy-nya terlebih dahulu.

  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 mempermudah Anda memahami tujuannya, dan menambahkan argumen. Anda juga dapat menggunakan notasi titik untuk mengakses argumen.

    Sub-alur kerja lainnya dapat memiliki beberapa argumen.

    Misalnya, alur kerja berikut menampilkan sapaan "Halo" kepada orang 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 Anda untuk menyelesaikan pembuatan atau pembaruan.

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 Anda, seperti {"firstName":"Workflows","lastName":"User"}, ke area "Input":

    Area input diisi dengan contoh string JSON

  5. Klik Jalankan.

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

gcloud

Tambahkan flag --data ke perintah gcloud Workflowexecute yang Anda gunakan untuk menjalankan alur kerja. Penanda ini mengambil 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, dengan 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, dengan menggunakan Java:

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

Untuk mengetahui informasi selengkapnya tentang 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 contoh alur kerja 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 mengetahui informasi selengkapnya tentang 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, 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. Dalam 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