Menggunakan status Peta dalam mode Inline - AWS Step Functions

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan status Peta dalam mode Inline

Secara default, Map status berjalan dalam mode Inline. Dalam mode Inline, status Peta hanya menerima array JSON sebagai input. Ia menerima array ini dari langkah sebelumnya dalam alur kerja. Dalam mode ini, setiap iterasi Map status berjalan dalam konteks alur kerja yang berisi status. Map Step Functions menambahkan riwayat eksekusi iterasi ini ke riwayat eksekusi alur kerja induk.

Dalam mode ini, Map status mendukung hingga 40 iterasi bersamaan.

MapStatus yang disetel ke Inline dikenal sebagai status Peta Inline. Gunakan Map status dalam mode Inline jika riwayat eksekusi alur kerja Anda tidak akan melebihi 25.000 entri, atau jika Anda tidak memerlukan lebih dari 40 iterasi bersamaan.

Untuk pengenalan menggunakan status Peta Inline, lihat tutorialnyaUlangi tindakan menggunakan status Peta Inline.

Konsep kunci dalam topik ini

Modus sebaris

Mode konkurensi terbatas dari negara. Map Dalam mode ini, setiap iterasi Map status berjalan dalam konteks alur kerja yang berisi status. Map Step Functions menambahkan riwayat eksekusi iterasi ini ke riwayat eksekusi alur kerja induk. Mapstatus berjalan dalam mode Inline secara default.

Mode ini hanya menerima array JSON sebagai input dan mendukung hingga 40 iterasi bersamaan.

Status Peta Sebaris

MapStatus diatur ke mode Inline.

Alur kerja peta

Kumpulan langkah-langkah yang dijalankan oleh Map state untuk setiap iterasi.

Iterasi status peta

Pengulangan alur kerja yang didefinisikan di dalam negara. Map

Bidang status Peta Inline

Untuk menggunakan status Peta Sebaris dalam alur kerja Anda, tentukan satu atau beberapa bidang ini. Anda menentukan bidang ini selain bidang status umum.

Type (Wajib)

Menetapkan jenis negara, sepertiMap.

ItemProcessor
(Wajib)

Berisi objek JSON berikut yang menentukan mode pemrosesan Map status dan definisi.

Definisi tersebut berisi serangkaian langkah yang harus diulang untuk memproses setiap item array.

  • ProcessorConfig— Objek JSON opsional yang menentukan mode pemrosesan untuk negara. Map Objek ini berisi Mode sub-bidang. Bidang ini default keINLINE, yang menggunakan Map status dalam mode Inline.

    Dalam mode ini, kegagalan iterasi apa pun menyebabkan Map status gagal. Semua iterasi berhenti ketika Map status gagal.

  • StartAt- Menentukan string yang menunjukkan keadaan pertama dalam alur kerja. String ini peka huruf besar/kecil dan harus cocok dengan nama salah satu objek state. Status ini berjalan pertama kali untuk setiap item dalam kumpulan data. Masukan eksekusi apa pun yang Anda berikan ke Map status akan diteruskan ke StartAt status terlebih dahulu.

  • States— Objek JSON yang berisi kumpulan status yang dibatasi koma. Dalam objek ini, Anda mendefinisikanMap workflow.

    catatan
    • Negara-negara di ItemProcessor lapangan hanya dapat bertransisi satu sama lain. Tidak ada negara di luar ItemProcessor lapangan yang dapat beralih ke keadaan di dalamnya.

    • ItemProcessorBidang menggantikan bidang yang sekarang tidak digunakan lagi. Iterator Meskipun Anda dapat terus menyertakan Map status yang menggunakan Iterator bidang ini, kami sangat menyarankan Anda mengganti bidang ini denganItemProcessor.

      Step Functions Local saat ini tidak mendukung ItemProcessor bidang. Kami menyarankan Anda menggunakan Iterator bidang dengan Step Functions Local.

ItemsPath (Opsional)

Menentukan jalur referensi menggunakan JsonPathsintaks. Path ini memilih node JSON yang berisi array item di dalam input status. Untuk informasi selengkapnya, lihat ItemsPath.

ItemSelector
(Opsional)

Mengganti nilai item array input sebelum diteruskan ke setiap iterasi Map status.

Di bidang ini, Anda menentukan JSON valid yang berisi kumpulan pasangan kunci-nilai. Pasangan ini dapat berisi salah satu dari berikut ini:

  • Nilai statis yang Anda tentukan dalam definisi mesin status Anda.

  • Nilai yang dipilih dari input status menggunakan jalur.

  • Nilai diakses dari objek konteks.

Untuk informasi selengkapnya, lihat ItemSelector.

ItemSelectorBidang menggantikan bidang yang sekarang tidak digunakan lagi. Parameters Meskipun Anda dapat terus menyertakan Map status yang menggunakan Parameters bidang ini, kami sangat menyarankan Anda mengganti bidang ini denganItemSelector.

MaxConcurrency (Opsional)

Menentukan nilai integer yang menyediakan batas atas pada jumlah iterasi Map negara yang dapat berjalan secara paralel. Misalnya, MaxConcurrency nilai 10 membatasi Map status menjadi 10 iterasi bersamaan yang berjalan pada satu waktu.

catatan

Perulangan bersamaan mungkin terbatas. Ketika ini terjadi, beberapa iterasi tidak akan dimulai sampai iterasi sebelumnya selesai. Kemungkinan hal ini terjadi meningkat ketika array input Anda memiliki lebih dari 40 item.

Untuk mencapai konkurensi yang lebih tinggi, pertimbangkanMenggunakan status Peta dalam mode Terdistribusi.

Nilai defaultnya adalah0, yang tidak membatasi konkurensi. Step Functions memanggil iterasi serempak mungkin.

MaxConcurrencyNilai dari 1 memanggil ItemProcessor sekali untuk setiap elemen array. Item dalam array diproses dalam urutan penampilan mereka dalam input. Step Functions tidak memulai iterasi baru sampai menyelesaikan iterasi sebelumnya.

MaxConcurrencyPath (Opsional)

Jika Anda ingin memberikan nilai konkurensi maksimum secara dinamis dari input status menggunakan jalur referensi, gunakan. MaxConcurrencyPath Ketika diselesaikan, jalur referensi harus memilih bidang yang nilainya adalah bilangan bulat non-negatif.

catatan

Suatu Map negara tidak dapat mencakup keduanya MaxConcurrency danMaxConcurrencyPath.

ResultPath (Opsional)

Menentukan di mana di input untuk menyimpan output dari iterasi Map negara. Status Peta kemudian menyaring input seperti yang ditentukan oleh OutputPathbidang, jika ditentukan. Kemudian, ia menggunakan input yang difilter sebagai output negara. Untuk informasi selengkapnya, lihat Pemrosesan Input dan Output.

ResultSelector (Opsional)

Lewati kumpulan pasangan nilai kunci, di mana nilainya statis atau dipilih dari hasilnya. Untuk informasi selengkapnya, lihat ResultSelector.

Tip

Jika status Paralel atau Peta yang Anda gunakan di mesin status Anda mengembalikan array array, Anda dapat mengubahnya menjadi array datar dengan ResultSelector bidang. Untuk informasi selengkapnya, lihat Meratakan array array.

Retry (Opsional)

Array objek, yang disebut Retriers, yang mendefinisikan kebijakan coba lagi. Status menggunakan kebijakan coba lagi ketika mereka menemukan kesalahan runtime. Untuk informasi selengkapnya, lihat Nyatakan contoh mesin menggunakan Coba Ulang dan menggunakan Catch.

catatan

Jika Anda mendefinisikan Retrier untuk status Peta Sebaris, kebijakan coba lagi berlaku untuk semua iterasi Map status, bukan hanya iterasi yang gagal. Misalnya, Map status Anda berisi dua iterasi yang berhasil dan satu iterasi gagal. Jika Anda telah menentukan Retry bidang untuk Map status, kebijakan coba lagi berlaku untuk ketiga iterasi Map status, bukan hanya iterasi yang gagal.

Catch (Opsional)

Array objek, disebut Catch yang menentukan status fallback. Status menjalankan penangkap jika mereka mengalami kesalahan runtime dan tidak memiliki kebijakan coba lagi, atau kebijakan coba ulang mereka habis. Untuk informasi selengkapnya, lihat Status Fallback.

Bidang usang

catatan

Meskipun Anda dapat terus menyertakan Map status yang menggunakan bidang berikut, kami sangat menyarankan Anda mengganti Iterator dengan ItemProcessor dan Parameters denganItemSelector.

Iterator

Menentukan objek JSON yang mendefinisikan satu set langkah-langkah yang memproses setiap elemen array.

Parameters

Menentukan koleksi pasangan kunci-nilai, di mana nilai-nilai dapat berisi salah satu dari berikut:

  • Nilai statis yang Anda tentukan dalam definisi mesin status Anda.

  • Nilai yang dipilih dari input menggunakan jalur.

Contoh status Peta Sebaris

Pertimbangkan data input berikut untuk Map status yang berjalan dalam mode Inline.

{ "ship-date": "2016-03-14T01:59:00Z", "detail": { "delivery-partner": "UQS", "shipped": [ { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, { "prod": "S39", "dest-code": 9511, "quantity": 40 }, { "prod": "R31", "dest-code": 9833, "quantity": 12 }, { "prod": "R40", "dest-code": 9860, "quantity": 887 }, { "prod": "R40", "dest-code": 9511, "quantity": 1220 } ] } }

Mengingat masukan sebelumnya, Map status dalam contoh berikut memanggil AWS Lambda fungsi bernama ship-val sekali untuk setiap item array di shipped bidang.

"Validate All": { "Type": "Map", "InputPath": "$.detail", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:ship-val:$LATEST" }, "End": true } } }, "End": true, "ResultPath": "$.detail.shipped", "ItemsPath": "$.shipped" }

Setiap iterasi Map status mengirimkan item dalam array, dipilih dengan ItemsPathbidang, sebagai input ke fungsi ship-val Lambda. Nilai-nilai berikut adalah contoh masukan yang dikirimkan Map status ke pemanggilan fungsi Lambda:

{ "prod": "R31", "dest-code": 9511, "quantity": 1344 }

Setelah selesai, output status Map adalah array JSON, saat setiap item adalah output dari perulangan. Dalam hal ini, array ini berisi output dari fungsi ship-val Lambda.

Contoh status Peta Sebaris dengan ItemSelector

Misalkan fungsi ship-val Lambda pada contoh sebelumnya juga membutuhkan informasi tentang kurir pengiriman. Informasi ini merupakan tambahan untuk item dalam array untuk setiap iterasi. Anda dapat menyertakan informasi dari input, bersama dengan informasi khusus untuk iterasi Map status saat ini. Perhatikan ItemSelector bidang dalam contoh berikut:

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "ItemSelector": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "ItemProcessor": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true }

ItemSelectorBlok menggantikan input ke iterasi dengan node JSON. Node ini berisi data item saat ini dari objek konteks dan informasi kurir dari delivery-partner bidang input Map status. Berikut ini adalah contoh input ke iterasi tunggal. MapStatus meneruskan input ini ke pemanggilan fungsi Lambdaship-val.

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS" }

Dalam contoh status Peta Inline sebelumnya, ResultPath bidang menghasilkan output dalam format yang sama dengan input. Namun, ia menimpa detail.shipped bidang dengan array di mana setiap elemen adalah output dari setiap pemanggilan Lambda ship-val iterasi.

Untuk informasi selengkapnya tentang penggunaan status Peta Sebaris dan bidangnya, lihat berikut ini.

Pemrosesan input dan output Map status sebaris

Untuk Map status tertentu, InputPathpilih subset dari masukan negara.

Masukan dari sebuah Map negara harus menyertakan array JSON. MapStatus menjalankan ItemProcessor bagian satu kali untuk setiap item dalam array. Jika Anda menentukan ItemsPathbidang, Map status memilih di mana di input untuk menemukan array untuk diulang. Jika tidak ditentukan, nilai ItemsPath berupa $, dan bagian ItemProcessor berharap agar array adalah satu-satunya input. Jika Anda menentukan ItemsPath bidang, nilainya harus berupa Jalur Referensi. MapStatus menerapkan jalur ini ke input efektif setelah menerapkanInputPath. ItemsPathHarus mengidentifikasi bidang yang nilainya adalah array JSON.

Masukan untuk setiap iterasi, secara default, adalah elemen tunggal dari bidang array yang diidentifikasi oleh ItemsPath nilai. Anda dapat mengganti nilai ini dengan ItemSelector bidang.

Setelah selesai, output status Map adalah array JSON, saat setiap item adalah output dari perulangan.

Untuk informasi selengkapnya tentang input dan output status Peta Inline, lihat berikut ini: