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 eksekusi paling tidak sekali secara default. Selama pemutaran ulang, SDK mengembalikan hasil pemeriksaan tanpa mengeksekusi ulang langkah-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 eksekusi paling tidak sekali 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 dalam langkah Anda 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. Lihat Idempotensi dan percobaan ulang di Panduan Pengembang SDK Eksekusi AWS Tahan Lama untuk detail tentang cara membuat kode untuk idempotensi.