Paralel - AWS Step Functions

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

Paralel

ParallelState ("Type": "Parallel") dapat digunakan untuk menambahkan cabang eksekusi terpisah di mesin negara Anda.

Selain bidang status umum, status Parallel memperkenalkan bidang tambahan ini.

Branches (Wajib)

Array objek yang menentukan mesin status untuk mengeksekusi secara paralel. Setiap objek mesin status tersebut harus memiliki bidang dengan nama States dan StartAt, yang maknanya persis seperti yang ada di tingkat atas mesin status.

ResultPath (Opsional)

Menentukan tempat (dalam input) untuk meletakkan output cabang. Input kemudian difilter sebagaimana ditentukan oleh bidang OutputPath (jika ada) sebelum digunakan sebagai output status. Untuk informasi selengkapnya, lihat Pemrosesan Input dan Output.

ResultSelector (Opsional)

Teruskan koleksi pasangan nilai kunci, tempat nilai-nilai bersifat statis atau dipilih dari hasil. Untuk informasi selengkapnya, lihat ResultSelector.

Retry (Opsional)

Array objek, yang disebut Retriers, yang menentukan kebijakan percobaan ulang jika status menemukan kesalahan waktu aktif. Untuk informasi selengkapnya, lihat Nyatakan contoh mesin menggunakan Coba Ulang dan menggunakan Catch.

Catch (Opsional)

Array objek, yang disebut Catcher, yang menentukan status fallback yang dijalankan jika status menemukan kesalahan waktu aktif dan kebijakan percobaan ulang habis atau tidak ditentukan. Untuk informasi selengkapnya, lihat Status Fallback.

Sebuah Parallel status menyebabkan AWS Step Functions untuk mengeksekusi setiap cabang, dimulai dengan status yang disebutkan di StartAt bidang cabang itu, serentetan mungkin, dan menunggu sampai semua cabang berakhir (mencapai status terminal) sebelum memproses bidang Parallel status. Next

Contoh Status Paralel

{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }

Dalam contoh ini, cabang LookupAddress dan LookupPhone dieksekusi secara paralel. Berikut adalah bagaimana alur kerja visual terlihat di konsol Step Functions.

Alur kerja paralel.

Setiap cabang harus mandiri. Status di cabang status Parallel tidak boleh memiliki bidang Next yang menargetkan sebuah bidang di luar cabang tersebut, begitu pula status lain di luar cabang tidak boleh bertransisi ke cabang tersebut.

Pemrosesan Input dan Output Status Paralel

Status Parallel menyediakan setiap cabang dengan salinan data inputnya sendiri (tunduk pada modifikasi oleh bidang InputPath). Ini menghasilkan output yang merupakan array dengan satu elemen untuk setiap cabang, yang berisi output dari cabang tersebut. Tidak ada persyaratan bahwa semua elemen harus dengan tipe yang sama. Array output dapat dimasukkan ke dalam data input (dan seluruhnya dikirim sebagai output status Parallel) dengan menggunakan bidang ResultPath dengan cara umum (lihat Pemrosesan Input dan Output).

{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Subtract", "End": true } } } ] } } }

Jika status FunWithMath diberikan array [3, 2] sebagai input, maka kedua status Add dan Subtract menerima array tersebut sebagai masukan. Output dari Subtract tugas Add dan akan menjadi jumlah dan perbedaan antara elemen array 3 dan 2, yaitu 5 dan1, sedangkan output dari Parallel keadaan akan menjadi array.

[ 5, 1 ]
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.

Penanganan Kesalahan

Jika setiap cabang gagal karena kesalahan tidak tertangani atau dengan transisi ke status Fail, seluruh status Parallel dianggap telah gagal dan semua cabangnya dihentikan. Jika kesalahan tidak ditangani oleh status Parallelitu sendiri, Step Functions menghentikan eksekusi dengan kesalahan.

catatan

Ketika status paralel gagal, fungsi Lambda Invoke terus berjalan dan pekerja aktivitas yang memproses token tugas tidak dihentikan.

  • Untuk menghentikan aktivitas yang berjalan lama, gunakan heartbeat untuk mendeteksi apakah cabangnya telah dihentikan oleh Step Functions, dan menghentikan pekerja yang memproses tugas. Memanggil SendTaskHeartbeat, SendTaskSuccess, atau SendTaskFailure akan mengembalikan kesalahan jika status telah gagal. Lihat Kesalahan Heartbeat.

  • Menjalankan fungsi Lambda tidak dapat dihentikan. Jika Anda telah menerapkan fallback, gunakan status Wait sehingga pekerjaan pembersihan terjadi setelah fungsi Lambda telah selesai.