Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengatur fungsi Lambda dengan Step Functions
AWS Step Functions menyediakan orkestrasi alur kerja visual untuk mengoordinasikan fungsi Lambda dengan layanan lain. AWS Dengan integrasi asli ke 220+ AWS layanan dan infrastruktur tanpa pemeliharaan yang dikelola sepenuhnya, Step Functions sangat ideal ketika Anda membutuhkan desain alur kerja visual dan integrasi layanan yang dikelola sepenuhnya.
Untuk orkestrasi menggunakan bahasa pemrograman standar dalam Lambda di mana logika alur kerja hidup bersama logika bisnis, pertimbangkan fungsi Lambda yang tahan lama. Untuk bantuan memilih di antara opsi-opsi ini, lihat Fungsi tahan lama atau Step Functions.
Misalnya, memproses pesanan mungkin memerlukan validasi detail pesanan, memeriksa tingkat inventaris, memproses pembayaran, dan membuat faktur. Tulis fungsi Lambda terpisah untuk setiap tugas dan gunakan Step Functions untuk mengelola alur kerja. Step Functions mengkoordinasikan aliran data antara fungsi Anda dan menangani kesalahan pada setiap langkah. Pemisahan ini membuat alur kerja Anda lebih mudah untuk divisualisasikan, dimodifikasi, dan dipelihara saat mereka tumbuh lebih kompleks.
Kapan menggunakan Step Functions dengan Lambda
Skenario berikut adalah contoh yang baik ketika Step Functions sangat cocok untuk mengatur aplikasi berbasis Lambda.
Pemrosesan berurutan
Pemrosesan sekuensial adalah ketika satu tugas harus diselesaikan sebelum tugas berikutnya dapat dimulai. Misalnya, dalam sistem pemrosesan pesanan, pemrosesan pembayaran tidak dapat dimulai sampai validasi pesanan selesai, dan pembuatan faktur harus menunggu konfirmasi pembayaran. Tulis fungsi Lambda terpisah untuk setiap tugas dan gunakan Step Functions untuk mengelola urutan dan menangani aliran data antar fungsi.
Fungsi Lambda tunggal mengelola seluruh alur kerja pemrosesan pesanan dengan:
Memanggil fungsi Lambda lainnya secara berurutan
Mengurai dan memvalidasi tanggapan dari setiap fungsi
Menerapkan penanganan kesalahan dan logika pemulihan
Mengelola aliran data antar fungsi
Gunakan dua fungsi Lambda: satu untuk memvalidasi pesanan dan satu untuk memproses pembayaran. Step Functions mengkoordinasikan fungsi-fungsi ini dengan:
Menjalankan tugas dalam urutan yang benar
Melewati data antar fungsi
Menerapkan penanganan kesalahan pada setiap langkah
Menggunakan status Pilihan untuk memastikan hanya pesanan yang valid yang dilanjutkan ke pembayaran
contoh grafik alur kerja
catatan
Penanganan kesalahan yang kompleks
Sementara Lambda menyediakan kemampuan coba ulang untuk pemanggilan asinkron dan pemetaan sumber peristiwa, Step Functions menawarkan penanganan kesalahan yang lebih canggih untuk alur kerja yang kompleks. Anda dapat mengonfigurasi percobaan ulang otomatis dengan backoff eksponensial dan menetapkan kebijakan coba ulang yang berbeda untuk berbagai jenis kesalahan. Saat percobaan ulang habis, gunakan Catch untuk merutekan kesalahan ke status fallback. Ini sangat berguna ketika Anda memerlukan penanganan kesalahan tingkat alur kerja yang mengoordinasikan beberapa fungsi dan layanan.
Untuk mempelajari selengkapnya tentang penanganan kesalahan fungsi Lambda di mesin status, lihat Menangani kesalahan
Satu fungsi Lambda menangani semua hal berikut:
-
Upaya untuk memanggil layanan pemrosesan pembayaran
-
Jika layanan pembayaran tidak tersedia, fungsi menunggu dan mencoba lagi nanti.
-
Menerapkan backoff eksponensial khusus untuk waktu tunggu
-
Setelah semua upaya gagal, catch error dan pilih flow lain
Gunakan satu fungsi Lambda yang hanya berfokus pada pemrosesan pembayaran. Step Functions mengelola penanganan kesalahan dengan:
Secara otomatis mencoba kembali tugas yang gagal dengan periode backoff yang dapat dikonfigurasi
Menerapkan kebijakan coba ulang yang berbeda berdasarkan jenis kesalahan
Merutekan berbagai jenis kesalahan ke status fallback yang sesuai
Mempertahankan status dan riwayat penanganan kesalahan
contoh grafik alur kerja
catatan
Alternatif kode-pertama: Fungsi tahan lama menyediakan penanganan kesalahan try-catch dengan strategi coba ulang yang dapat dikonfigurasi. Lihat Penanganan kesalahan dalam fungsi tahan lama.
Alur kerja bersyarat dan persetujuan manusia
Gunakan status Step Functions Choice untuk merutekan alur kerja berdasarkan output fungsi dan akhiran waitForTask Token untuk menjeda alur kerja untuk keputusan manusia. Misalnya, untuk memproses permintaan kenaikan batas kredit, gunakan fungsi Lambda untuk mengevaluasi faktor risiko. Kemudian, gunakan Step Functions untuk merutekan permintaan berisiko tinggi ke persetujuan manual dan permintaan berisiko rendah ke persetujuan otomatis.
Untuk menerapkan contoh alur kerja yang menggunakan pola integrasi token tugas callback, lihat Callback with Task Token
Fungsi Lambda tunggal mengelola alur kerja persetujuan yang kompleks dengan:
Menerapkan logika bersyarat bersarang untuk mengevaluasi permintaan kredit
Memanggil fungsi persetujuan yang berbeda berdasarkan jumlah permintaan
Mengelola beberapa jalur persetujuan dan poin keputusan
Melacak status persetujuan yang tertunda
Menerapkan batas waktu dan logika notifikasi untuk persetujuan
Gunakan tiga fungsi Lambda: satu untuk mengevaluasi risiko setiap permintaan, satu untuk menyetujui permintaan berisiko rendah, dan satu untuk mengarahkan permintaan berisiko tinggi ke manajer untuk ditinjau. Step Functions mengelola alur kerja dengan:
Menggunakan status Pilihan untuk merutekan permintaan berdasarkan jumlah dan tingkat risiko
Menjeda eksekusi sambil menunggu persetujuan manusia
Mengelola batas waktu untuk persetujuan yang tertunda
Memberikan visibilitas ke status saat ini dari setiap permintaan
contoh grafik alur kerja
catatan
Alternatif kode-pertama: Fungsi tahan lama mendukung panggilan balik untuk alur kerja. human-in-the-loop Lihat Callback dalam fungsi tahan lama.
Pemrosesan paralel
Step Functions menyediakan tiga cara untuk menangani pemrosesan paralel:
-
Status Paralel mengeksekusi beberapa cabang alur kerja Anda secara bersamaan. Gunakan ini saat Anda perlu menjalankan fungsi yang berbeda secara paralel, seperti membuat thumbnail saat mengekstrak metadata gambar.
-
Status Peta Inline memproses array data dengan hingga 40 iterasi bersamaan. Gunakan ini untuk kumpulan data kecil hingga menengah di mana Anda perlu melakukan operasi yang sama pada setiap item.
-
Status Peta Terdistribusi menangani pemrosesan paralel skala besar dengan hingga 10.000 eksekusi bersamaan, mendukung array JSON dan sumber data Amazon Simple Storage Service (Amazon S3). Gunakan ini saat memproses kumpulan data besar atau saat Anda membutuhkan konkurensi yang lebih tinggi.
Fungsi Lambda tunggal mencoba mengelola pemrosesan paralel dengan:
Secara bersamaan menjalankan beberapa fungsi pemrosesan gambar
Menerapkan logika eksekusi parallel kustom
Mengelola batas waktu dan penanganan kesalahan untuk setiap tugas paralel
Mengumpulkan dan menggabungkan hasil dari semua fungsi
Gunakan tiga fungsi Lambda: satu untuk membuat gambar mini, satu untuk menambahkan tanda air, dan satu untuk mengekstrak metadata. Step Functions mengelola fungsi-fungsi ini dengan:
Menjalankan semua fungsi secara bersamaan menggunakan status Paralel
Mengumpulkan hasil dari setiap fungsi ke dalam array yang diurutkan
Mengelola batas waktu dan penanganan kesalahan di semua eksekusi paralel
Melanjutkan hanya ketika semua cabang paralel selesai
contoh grafik alur kerja
catatan
Alternatif kode-pertama: Penyediaan parallel() dan map() pengoperasian fungsi yang tahan lama. Lihat Eksekusi paralel.
Kapan tidak menggunakan Step Functions dengan Lambda
Tidak semua aplikasi berbasis Lambda mendapat manfaat dari penggunaan Step Functions. Pertimbangkan skenario ini saat memilih arsitektur aplikasi Anda.
Aplikasi sederhana
catatan
Untuk alur kerja yang tidak memerlukan desain visual atau integrasi layanan ekstensif, fungsi Lambda yang tahan lama mungkin merupakan alternatif yang lebih sederhana yang menjaga logika alur kerja dalam kode di dalam Lambda.
Untuk aplikasi yang tidak memerlukan orkestrasi kompleks, menggunakan Step Functions mungkin menambah kompleksitas yang tidak perlu. Misalnya, jika Anda hanya memproses pesan dari antrean Amazon SQS atau menanggapi peristiwa EventBridge Amazon, Anda dapat mengonfigurasi layanan ini untuk menjalankan fungsi Lambda Anda secara langsung. Demikian pula, jika aplikasi Anda hanya terdiri dari satu atau dua fungsi Lambda dengan penanganan kesalahan langsung, pemanggilan Lambda langsung atau arsitektur berbasis peristiwa mungkin lebih mudah untuk diterapkan dan dipelihara.
Pemrosesan data yang kompleks
Anda dapat menggunakan status Peta Terdistribusi Step Functions untuk memproses kumpulan data Amazon S3 besar secara bersamaan dengan fungsi Lambda. Ini efektif untuk banyak beban kerja paralel skala besar, termasuk memproses data semi-terstruktur seperti file JSON atau CSV. Namun, untuk transformasi data yang lebih kompleks atau analitik lanjutan, pertimbangkan alternatif ini:
-
Pipa transformasi data: Digunakan AWS Glue untuk pekerjaan ETL yang memproses data terstruktur atau semi-terstruktur dari berbagai sumber. AWS Glue sangat berguna ketika Anda membutuhkan katalog data bawaan dan kemampuan manajemen skema.
Beban kerja intensif CPU
Meskipun Step Functions dapat mengatur tugas intensif CPU, fungsi Lambda mungkin tidak cocok untuk beban kerja ini karena sumber daya CPU-nya yang terbatas. Untuk operasi komputasi intensif dalam alur kerja Anda, pertimbangkan alternatif ini:
-
Orkestrasi kontainer: Gunakan Step Functions untuk mengelola tugas Amazon Elastic Container Service (Amazon ECS) untuk sumber daya komputasi yang lebih konsisten dan terukur.
-
Pemrosesan Batch: Integrasikan AWS Batch dengan Step Functions untuk mengelola pekerjaan batch intensif komputasi yang memerlukan penggunaan CPU berkelanjutan.