全部产品
Search
文档中心

CloudFlow:Masukan dan Keluaran

更新时间:Jun 29, 2025

Topik ini menjelaskan dasar-dasar masukan dan keluaran.

Alur dan Langkah

Data biasanya perlu diteruskan antara alur dan langkah, serta antara beberapa langkah dalam sebuah alur. Langkah-langkah dalam Flow Definition Language (FDL) mirip dengan fungsi dalam bahasa pemrograman fungsional. Langkah-langkah ini menerima masukan dan menghasilkan keluaran, yang kemudian disimpan dalam variabel lokal langkah induk (pemanggil). Masukan dan keluaran harus berupa struktur objek JSON, dan tipe variabel lokal bervariasi tergantung pada jenis langkahnya. Sebagai contoh, langkah tugas menggunakan hasil dari pemanggilan fungsi Function Compute sebagai variabel lokal, sedangkan langkah paralel menggunakan keluaran (array) dari semua cabang sebagai variabel lokal. Ukuran total masukan, keluaran, dan variabel lokal dalam sebuah langkah tidak boleh melebihi 32 KiB. Jika ukuran tersebut terlampaui, eksekusi alur akan gagal.

Jika sebuah langkah berisi langkah lain, langkah luar disebut langkah induk, dan langkah yang termasuk di dalamnya disebut langkah anak. Langkah induk dari langkah paling luar adalah alur itu sendiri. Jika dua langkah memiliki langkah induk yang sama, kedua langkah tersebut berada pada level yang sama.

Setiap alur dan langkah mencakup masukan, keluaran, dan variabel lokal. Pemetaan mereka dijelaskan sebagai berikut:

  • inputMappings dari sebuah langkah memetakan masukan dan variabel lokal langkah induk ke masukan langkah anak.
  • outputMappings dari sebuah langkah memetakan masukan dan variabel lokal langkah saat ini ke keluaran langkah tersebut.
  • inputMappings dari sebuah alur memetakan masukan eksekusi alur ke masukan alur.
  • outputMappings dari sebuah alur memetakan masukan dan variabel lokal alur ke keluaran alur.

Variabel lokal langkah induk berisi himpunan gabungan dari semua keluaran langkah anaknya. Jika keluaran mengandung nilai kunci yang berulang, hasil dari langkah yang lebih akhir akan menimpa hasil dari langkah sebelumnya. Dalam banyak kasus, Anda dapat menggunakan pemetaan default tanpa menentukan pemetaan masukan dan keluaran secara eksplisit.

  • Ketika pemetaan masukan tidak ditentukan, masukan langkah anak merupakan kombinasi dari masukan dan variabel lokal langkah induknya. Jika variabel lokal dan masukan memiliki nilai kunci yang sama, variabel lokal akan menimpa masukan.
  • Ketika pemetaan keluaran tidak ditentukan, variabel lokal digunakan sebagai keluaran di semua langkah, kecuali langkah paralel dan langkah foreach.

Untuk mengontrol masukan dan keluaran dengan lebih baik, Anda perlu memahami aturan pemetaan secara rinci.

Gambar berikut menunjukkan pemetaan masukan dan keluaran dari alur contoh. Dalam alur ini, step1 adalah langkah induk dari step2 dan step3, sementara step1 dan step4 adalah langkah paling luar.

version: v1
type: flow
steps:
  - type: parallel
    name: step1
    branches:
      - steps:
        - type: pass
          name: step2
      - steps:
        - type: pass
          name: step3
  - type: pass
    name: step4      
flow-io-mappings-v0

Kode berikut dapat digunakan untuk mendeskripsikan pemetaan sehingga lebih mudah dipahami:

func flow(input0 Input) (output0 Output) {
  local0 := {}
  input1 := buildInput(step1InputMappings, input0, local0)
  output1 := step1(input1)
  save(local0, output1)
  input4 := buildInput(step4InputMappings, input0, local0)
  output4 := step4(input4)
  save(local0, output4)
  return buildOutput(flowOutputMappings, input0, local0)
}
func step1(input1 Input) (output1 Output) {
  local10 := {}
  input2 := buildInput(step2InputMappings, input1, local10)
  output2 := step2(input2)
  save(local10, output2)
  local11 := {}
  input3 := buildInput(step3InputMappings, input1, local11)
  output3 := step3(input3)
  save(local11, output3)
  return buildOutput(step1OutputMappings, [local10, local11])
}
func step2(input2 Input) (output2 Output) {
}
func step3(input3 Input) (output3 Output) {
}
func step4(input4 Input) (output4 Output) {
}       

Dalam contoh ini, alur terdiri dari dua langkah anak: step1 dan step4. step1 adalah langkah paralel yang berisi step2 dan step3.

  1. Ketika sistem mulai mengeksekusi alur, ia mengonversi masukan StartExecution menjadi masukan alur (input0) berdasarkan pemetaan masukan alur.
  2. Ketika eksekusi flow dimulai, local0 kosong.
  3. Sistem menyiapkan masukan input1 untuk berdasarkan pemetaan masukan (step1InputMappingsstep1). Sumber pemetaan adalah masukan input0 dan variabel lokal local0 dari flow.
  4. Sistem memanggil step1 untuk memuat input1. step1 mengembalikan output1.
    • Ketika sistem mulai mengeksekusi step1, local10-nya kosong. step1 adalah langkah paralel, sehingga setiap cabang sesuai dengan variabel lokal, menghindari akses bersamaan.
    • Sistem menyiapkan masukan input2 untuk step2 berdasarkan pemetaan masukan (step2InputMappings). Sumber pemetaan adalah masukan input1 dan variabel lokal local10 dari step1.
    • Sistem memanggil step2 untuk memuat input2. step2 mengembalikan output2.
    • Sistem menyimpan keluaran step2 ke variabel lokal local10 dari step1.
    • Demikian pula, sistem memanggil step3 dan menyimpan hasilnya ke variabel lokal local11 dari step1.
  5. Sistem menyimpan keluaran step1 ke variabel lokal local0 dari flow.
  6. Demikian pula, sistem menyiapkan masukan input4 untuk step4. Sumber pemetaan adalah masukan input0 dan variabel lokal local0 dari flow.
    Catatan Pada titik ini, variabel lokal local0 mungkin berisi keluaran step1. Ini mencapai transfer data antara step1 dan step4.
  7. Sistem memanggil step4 untuk memuat input4. step4 mengembalikan output4.
  8. Sistem menyimpan keluaran step4 ke variabel lokal local0 dari flow.
  9. Akhirnya, sistem mengonversi local0 menjadi keluaran alur berdasarkan pemetaan keluaran alur.

Tipe

Baik pemetaan masukan maupun keluaran adalah array yang terdiri dari target dan source. source mendefinisikan sumber parameter dan diatur ke nilai yang berbeda untuk pemetaan yang berbeda. Sebagai contoh, $input.key menunjukkan bahwa sumber parameter adalah nilai dari $.key dalam input. target mendefinisikan nama parameter target. Jika nilai source dimulai dengan $, nilainya ditentukan dalam format jalur JSON (Anda dapat menggunakan JSONPath Online Evaluator untuk men-debug jalur JSON), dan sistem mengurai sumber menjadi nilai spesifik berdasarkan jalur tersebut. Jika tidak, nilai tersebut dianggap sebagai konstanta.

  • Sumber

    source dapat diatur ke konstanta, seperti nilai tipe number, string, boolean, array, object, atau null.

    Sumber dalam contoh berikut menggunakan konstanta dari berbagai tipe. Informasi berikut contoh menunjukkan keluaran.

    outputMappings:
      - target: int_key
        source: 1
      - target: bool_key
        source: true
      - target: string_key
        source: abc
      - target: float_key
        source: 1.234
      - target: null_key
        source: null
      - target: array1
        source: [1, 2, 3]
      - target: array2
        source:
          - 1
          - 2
          - 3
      - target: object1
        source: {a: b}
      - target: object2
        source:
          a:           
    {
      "array1": [1, 2, 3],
      "array2": [1, 2, 3],
      "bool_key": true,
      "float_key": 1.234,
      "int_key": 1,
      "null_key": null,
      "object1": {
        "a": "b"
      },
      "object2": {
        "a": "b"
      },
      "string_key": "abc"
    }            
  • Target

    Target hanya bisa berupa konstanta bertipe string.

Pemetaan Masukan

Pemetaan masukan mengonversi masukan ($input) dari langkah induk, variabel lokal ($local) dari langkah induk, atau konstanta menjadi masukan langkah anak. Jika pemetaan masukan tidak ditentukan, masukan dan variabel lokal langkah induk digabungkan dan digunakan sebagai masukan langkah anak. Jika masukan dan variabel lokal langkah induk memiliki nama yang sama, masukan baru menggunakan nama dan nilai dalam variabel lokal.

inputMappings:
  - target: key1
    source: $input.key1
  - target: key2
    source: $local.key2
  - target: key3
    source: literal         
Masukan $input Variabel Lokal $local Pemetaan Masukan Masukan Langkah Anak
{
"key1":"value1"
}
{
"key2":"value2"
}
inputMappings:
  - target: key1
    source: $input.key1
  - target: key2
    source: $local.key2
  - target: key3
    source: literal
{
"key1":"value1"
"key2":"value2"
"key3":"literal"
}
{
"key1":"value1"
}
{
"key2":"value2"
}
Tidak ada
{
"key1":"value1"
"key2":"value2"
}
{
"key1":"value1"
}
{
"key1":"value2"
}
Tidak ada
{
"key1":"value2"
}

Pemetaan Keluaran

Pemetaan keluaran mengonversi masukan ($input) dari langkah saat ini, variabel lokal ($local) dari langkah saat ini, atau konstanta menjadi keluaran langkah ini. Jika pemetaan keluaran tidak ditentukan, langkah pilihan dan langkah foreach menggunakan variabel lokal mereka sebagai keluaran, sedangkan langkah tugas menggunakan hasil eksekusi tugas sebagai keluaran. Variabel lokal langkah paralel dan foreach adalah array. Oleh karena itu, Anda harus mendefinisikan pemetaan keluaran untuk mengonversi array menjadi objek JSON. Secara default, variabel lokal mereka tidak di-output. Untuk informasi lebih lanjut, lihat deskripsi langkah.

outputMappings:
  - target: key1
    source: $input.key1
  - target: key2
    source: $local.key2
  - target: key3
    source: literal          
Masukan $input Variabel Lokal $local Pemetaan Keluaran Keluaran Langkah
{
"key1":"value1"
}
{
"key2":"value2"
}
outputMappings:
  - target: key1
    source: $input.key1
  - target: key2
    source: $local.key2
  - target: key3
    source: literal
{
"key1":"value1"
"key2":"value2"
"key3":"literal"
}
{
"key1":"value1"
}
[
  {
    "key2":"value2.1"
  },
  {
    "key2":"value2.2"
  }
]
outputMappings:
  - target: key1
    source: $input.key1
  - target: key2
    source: $local[*].key2
  - target: key3
    source: literal
{
  "key1":"value1",
  "key2":["value2.1","value2.2"],
  "key3":"literal"
}
{
"key1":"value1"
}
{
"key2":"value2"
}
Tidak ada
{
"key2":"value2"
}

Simpan Keluaran ke Variabel Lokal Langkah Induk

Keluaran langkah anak ($output) akan disimpan ke variabel lokal langkah induk. Jika mereka mengandung nama yang sama, nama dan nilai dalam keluaran akan menimpa nama dan nilai yang sesuai dalam variabel lokal.

Keluaran $output Variabel Lokal Langkah Induk $local Variabel Lokal Langkah Induk Setelah Modifikasi
{
"key1":"value1"
}
{
"key2":"value2"
}
  {
    "key1":"value1"
  },
  {
    "key2":"value2"
  }
{
"key1":"value11"
}
  {
    "key1":"value1"
  },
  {
    "key2":"value2"
  }
  {
    "key1":"value11"
  },
  {
    "key2":"value2"
  }