Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Idempotensi
Fungsi tahan lama menyediakan idempotensi bawaan untuk eksekusi dimulai melalui nama eksekusi. Saat Anda memberikan nama eksekusi, Lambda menggunakannya untuk mencegah eksekusi duplikat dan mengaktifkan percobaan ulang permintaan pemanggilan yang aman. Langkah-langkah memiliki semantik at-least-once eksekusi secara default—selama pemutaran ulang, SDK mengembalikan hasil pemeriksaan tanpa mengeksekusi ulang langkah yang telah diselesaikan, tetapi logika bisnis Anda harus idempoten untuk menangani percobaan ulang potensial sebelum selesai.
catatan
Pemetaan sumber acara Lambda (ESM) tidak mendukung idempotensi saat peluncuran. Oleh karena itu, setiap pemanggilan (termasuk percobaan ulang) memulai eksekusi baru yang tahan lama. Untuk memastikan eksekusi idempoten dengan pemetaan sumber peristiwa, terapkan logika idempotensi dalam kode fungsi Anda seperti dengan Powertools for AWS Lambda atau gunakan fungsi Lambda biasa sebagai proxy (dispatcher) untuk memanggil fungsi tahan lama dengan kunci idempotensi (parameter nama eksekusi).
Nama eksekusi
Anda dapat memberikan nama eksekusi saat menjalankan fungsi tahan lama. Nama eksekusi bertindak sebagai kunci idempotensi, memungkinkan Anda untuk mencoba kembali permintaan pemanggilan dengan aman tanpa membuat eksekusi duplikat. Jika Anda tidak memberikan nama, Lambda akan menghasilkan ID eksekusi unik secara otomatis.
Nama eksekusi harus unik dalam akun dan wilayah Anda. Saat Anda memanggil fungsi dengan nama eksekusi yang sudah ada, perilaku Lambda bergantung pada status eksekusi yang ada dan apakah payload cocok.
Perilaku idempotensi
Tabel berikut menjelaskan cara Lambda menangani permintaan pemanggilan berdasarkan apakah Anda memberikan nama eksekusi, status eksekusi yang ada, dan apakah payload cocok:
| Skenario | Nama yang disediakan? | Status eksekusi yang ada | Muatan identik? | Perilaku |
|---|---|---|---|---|
| 1 | Tidak | N/A | N/A | Eksekusi baru dimulai: Lambda menghasilkan ID eksekusi unik dan memulai eksekusi baru |
| 2 | Ya | Tidak pernah ada atau retensi kedaluwarsa | N/A | Eksekusi baru dimulai: Lambda memulai eksekusi baru dengan nama yang disediakan |
| 3 | Ya | Berjalan | Ya | Idempoten start: Lambda mengembalikan informasi eksekusi yang ada tanpa memulai duplikat. Untuk pemanggilan sinkron, ini bertindak sebagai penyambungan kembali ke eksekusi yang sedang berjalan |
| 4 | Ya | Berjalan | Tidak | Kesalahan: Lambda mengembalikan DurableExecutionAlreadyExists kesalahan karena eksekusi dengan nama ini sudah berjalan dengan muatan yang berbeda |
| 5 | Ya | Ditutup (berhasil, gagal, berhenti, atau habis waktu) | Ya | Idempoten start: Lambda mengembalikan informasi eksekusi yang ada tanpa memulai eksekusi baru. Hasil eksekusi tertutup dikembalikan |
| 6 | Ya | Ditutup (berhasil, gagal, berhenti, atau habis waktu) | Tidak | Kesalahan: Lambda mengembalikan DurableExecutionAlreadyExists kesalahan karena eksekusi dengan nama ini sudah selesai dengan muatan yang berbeda |
Catatan
Skenario 3 dan 5 menunjukkan perilaku idempoten di mana Lambda menangani permintaan pemanggilan duplikat dengan aman dengan mengembalikan informasi eksekusi yang ada alih-alih membuat duplikat.
Langkah idempotensi
Langkah-langkah memiliki semantik at-least-once eksekusi secara default. Saat fungsi Anda diputar ulang setelah menunggu, panggilan balik, atau kegagalan, SDK akan memeriksa setiap langkah terhadap log pos pemeriksaan. Untuk langkah-langkah yang sudah selesai, SDK mengembalikan hasil pemeriksaan tanpa mengeksekusi ulang logika langkah. Namun, jika sebuah langkah gagal atau fungsi terputus sebelum langkah selesai, langkah tersebut dapat dijalankan beberapa kali.
Logika bisnis Anda yang dibungkus dalam langkah-langkah harus idempoten untuk menangani percobaan ulang potensial. Gunakan kunci idempotensi untuk memastikan operasi seperti pembayaran atau penulisan database dijalankan hanya sekali, bahkan jika langkah tersebut dicoba lagi.
Contoh: Menggunakan kunci idempotensi dalam langkah-langkah
Anda dapat mengonfigurasi langkah-langkah untuk menggunakan semantik at-most-once eksekusi dengan menyetel mode eksekusi ke. AT_MOST_ONCE_PER_RETRY Ini memastikan langkah dijalankan paling banyak sekali per percobaan ulang, tetapi mungkin tidak mengeksekusi sama sekali jika fungsi terganggu sebelum langkah selesai.
SDK memberlakukan pemutaran ulang deterministik dengan memvalidasi bahwa nama langkah dan urutan cocok dengan log pos pemeriksaan selama pemutaran ulang. Jika kode Anda mencoba mengeksekusi langkah-langkah dalam urutan yang berbeda atau dengan nama yang berbeda, SDK akan menampilkan file. NonDeterministicExecutionError
Cara kerja replay dengan langkah-langkah yang telah selesai:
Pemanggilan pertama: Fungsi mengeksekusi langkah A, membuat pos pemeriksaan, lalu menunggu
Pemanggilan kedua (setelah menunggu): Fungsi memutar ulang dari awal, langkah A mengembalikan hasil yang diperiksa secara instan tanpa mengeksekusi ulang, lalu melanjutkan ke langkah B
Pemanggilan ketiga (setelah menunggu lagi): Fungsi memutar ulang dari awal, langkah A dan B mengembalikan hasil pemeriksaan secara instan, lalu melanjutkan ke langkah C
Mekanisme pemutaran ulang ini memastikan bahwa langkah-langkah yang telah diselesaikan tidak dijalankan kembali, tetapi logika bisnis Anda harus tetap idempoten untuk menangani percobaan ulang sebelum selesai.