Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menangani keunikan dengan Lambda SnapStart
Saat pemanggilan ditingkatkan pada suatu SnapStart fungsi, Lambda menggunakan satu snapshot yang diinisialisasi untuk melanjutkan beberapa lingkungan eksekusi. Jika kode inisialisasi Anda menghasilkan konten unik yang disertakan dalam snapshot, maka konten tersebut mungkin tidak unik saat digunakan kembali di seluruh lingkungan eksekusi. Untuk mempertahankan keunikan saat menggunakan SnapStart, Anda harus menghasilkan konten unik setelah inisialisasi. Ini termasuk ID unik, rahasia unik, dan entropi yang digunakan untuk menghasilkan pseudorandomness.
Kami merekomendasikan praktik terbaik berikut untuk membantu Anda mempertahankan keunikan dalam kode Anda. Untuk fungsi Java, Lambda juga menyediakan alat SnapStart pemindaian sumber terbuka untuk membantu memeriksa kode yang mengasumsikan keunikan. Jika Anda menghasilkan data unik selama fase inisialisasi, maka Anda dapat menggunakan kait runtime untuk mengembalikan keunikan. Dengan runtime hooks, Anda dapat menjalankan kode tertentu segera sebelum Lambda mengambil snapshot atau segera setelah Lambda melanjutkan fungsi dari snapshot.
Hindari menyimpan status yang bergantung pada keunikan selama inisialisasi
Selama fase inisialisasi Fungsi Acara Anda, hindari caching data yang dimaksudkan untuk menjadi unik, seperti membuat ID unik untuk pencatatan atau pengaturan benih untuk fungsi acak. Sebagai gantinya, kami menyarankan Anda membuat data unik atau menetapkan seed untuk fungsi acak di dalam penangan fungsi Anda—atau menggunakan hook runtime.
Contoh berikut menunjukkan cara menghasilkan UUID di handler Event Function.
Gunakan generator nomor pseudorandom yang aman secara kriptografis (CSPRNGs)
Ketika SnapStart diaktifkan, Lambda mengambil snapshot dari lingkungan eksekusi fungsi Anda termasuk semua aplikasi dan memori sistem. Ini berarti status internal setiap generator nomor acak (RNG) dipertahankan persis seperti pada waktu snapshot, bersama dengan byte acak apa pun yang aplikasi Anda atau dependensinya telah dihasilkan dan disimpan dalam buffer memori.
Ketika Lambda mengembalikan lingkungan eksekusi dari snapshot, itu menyemai kembali generator nomor acak kernel dari /dev/random dan dengan entropi baru. /dev/urandom Perangkat lunak yang membaca angka acak langsung dari perangkat ini mempertahankan keacakan dengan SnapStart.
Jika aplikasi Anda bergantung pada keacakan, kami sarankan Anda menggunakan generator nomor acak yang aman secara kriptografis (CSPRNGs). Selain OpenSSL yang disediakan AL, runtime terkelola Lambda yang mendukung SnapStart (Java versi 11+, Python versi 3.12+, dan .NET versi 8+), termasuk CSPRNG bawaan berikut:
-
Jawa:
java.security.SecureRandom -
Python:
random.SystemRandom -
.NET:
System.Security.Cryptography.RandomNumberGenerator
catatan
Untuk runtime Go Lambda, tidak ada perubahan yang diperlukan jika fungsi Anda menggunakan pustaka standarcrypto/rand, yang kompatibel dengan snapstart secara default.
Saat Anda mengemas fungsi Anda sebagai gambar kontainer, gambar dasar Anda menentukan kompatibilitas keunikan dengan: SnapStart
-
Gambar dasar Lambda untuk runtime terkelola (Java versi 11+, Python versi 3.12+, dan.NET versi 8+) — Kompatibel dengan seperti yang dijelaskan di atas. SnapStart
-
Gambar dasar.al2023 yang disediakan — Kompatibel jika runtime bahasa pemrograman Anda memperoleh entropi dari,
/dev/random,/dev/urandomatau build OpenSSL (openssl-snapsafe-libs) SnapStart-compatible yang tercantum dalam daftar paket Amazon Linux 2023. Jika runtime Anda bergantung pada sumber entropi lain, ikuti langkah-langkah yang dijelaskan di bagian “Gambar dasar Anda sendiri” di bawah ini. -
Gambar dasar Anda sendiri — Audit pustaka kriptografi Anda dan gunakan kait runtime pasca-pemulihan untuk membuang status generator nomor acak (RNG) yang di-cache atau byte acak buffer, memastikan perpustakaan membaca entropi baru dari sistem setelah pemulihan. Misalnya, fungsi Rust yang menggunakan
rand::rngs::ThreadRngharus memanggilreseed()setelah restore. Kami menyarankan Anda membuat menggunakan gambar dasar Lambda bila memungkinkan. Khususnya, jika image dasar Anda menyertakan versi OpenSSL sendiri atau fork OpenSSL (seperti BoringSSL atau LibreSSL), beralihlah ke image dasar.al2023 yang disediakan, yang menyertakan build OpenSSL (openssl-snapsafe-libs), atau gunakan libcrypto (-LC). SnapStart-compatible AWSAWS
Versi pustaka minimum yang didukung
AWS pustaka kriptografi secara otomatis mempertahankan keacakan dengan SnapStart memulai dengan versi minimum yang ditentukan dalam tabel berikut. Jika Anda menggunakan pustaka ini dengan Fungsi Peristiwa Lambda, pastikan Anda menggunakan versi minimum berikut atau versi yang lebih baru:
| Pustaka | Versi minimum yang didukung (x86) | Versi minimum yang didukung (ARM) |
|---|---|---|
| AWS libcrypto (AWS-LC) |
1.16.0 |
1.30.0 |
| AWS libcrypto FIPS |
2.0.13 |
2.0.13 |
Jika Anda mengemas pustaka kriptografi sebelumnya dengan Fungsi Peristiwa Lambda sebagai dependensi transitif melalui pustaka berikut, pastikan Anda menggunakan versi minimum berikut atau versi yang lebih baru:
| Pustaka | Versi minimum yang didukung (x86) | Versi minimum yang didukung (ARM) |
|---|---|---|
| AWS SDK for Java 2.x |
2.23.20 |
2.26.12 |
| AWS Runtime Umum untuk Java |
0.29.8 |
0.29.25 |
| Penyedia Crypto Amazon Corretto |
2.4.1 |
2.4.1 |
| Amazon Corretto Penyedia Crypto FIPS |
2.4.1 |
2.4.1 |
Contoh berikut menunjukkan cara menggunakan CSPrNGs untuk menjamin urutan nomor unik bahkan ketika fungsi dipulihkan dari snapshot.
SnapStart alat pemindaian (hanya Java)
Lambda menyediakan alat pemindaian untuk Java untuk membantu Anda memeriksa kode yang mengasumsikan keunikan. Alat SnapStart pemindaian adalah SpotBugs
Untuk mempelajari lebih lanjut tentang menangani keunikan dengan SnapStart, lihat Memulai lebih cepat dengan AWS Lambda SnapStart