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
Ketika pemanggilan meningkatkan skala pada suatu SnapStart fungsi, Lambda menggunakan snapshot tunggal yang diinisialisasi untuk melanjutkan beberapa lingkungan eksekusi. Jika kode inisialisasi menghasilkan konten unik yang disertakan dalam snapshot, maka konten tersebut mungkin tidak unik ketika 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 hook runtime untuk mengembalikan keunikan. Dengan runtime hook, Anda dapat menjalankan kode tertentu segera sebelum Lambda mengambil snapshot atau segera setelah Lambda melanjutkan fungsi dari snapshot.
Hindari menyimpan status yang tergantung pada keunikan selama inisialisasi
Selama fase in isialisasi fungsi Anda, hindari caching data yang dimaksudkan untuk menjadi unik, seperti menghasilkan ID unik untuk logging atau menyetel benih untuk fungsi acak. Sebagai gantinya, sebaiknya Anda membuat data unik atau menyetel benih untuk fungsi acak di dalam function handler Anda—atau menggunakan hook runtime. Terapkan kode sebelum atau sesudah snapshot fungsi Lambda
Contoh berikut menunjukkan cara menghasilkan UUID dalam pengendali fungsi.
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 telah dihasilkan aplikasi Anda atau dependensinya dan disimpan dalam buffer memori.
Ketika Lambda mengembalikan lingkungan eksekusi dari snapshot, ia menyemai ulang generator nomor acak kernel dari /dev/random dan /dev/urandom dengan entropi baru. 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 snapshot secara default.
Saat Anda mengemas fungsi Anda sebagai gambar wadah, 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/urandom, atau build OpenSSL (openssl-snapsafe- SnapStart-compatible libs) yang tercantum dalam daftar paket Amazon Linux 2023. https://docs.aws.amazon.com/linux/al2023/release-notes/all-packages.html 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 hook 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 digunakan
rand::rngs::ThreadRngharus memanggilreseed()setelah pemulihan. Kami menyarankan Anda membangun menggunakan gambar dasar Lambda bila memungkinkan. Secara khusus, jika gambar dasar Anda menyertakan versi OpenSSL atau fork OpenSSL sendiri (seperti BoringSSL atau LibreSSL), beralih ke gambar dasar.al2023 yang disediakan, yang mencakup SnapStart-compatible build OpenSSL (openssl-snapsafe-libs), atau gunakan libcrypto (-LC). AWSAWS
Versi pustaka minimum yang didukung
AWS pustaka kriptografi secara otomatis mempertahankan keacakan dengan SnapStart dimulai dengan versi minimum yang ditentukan dalam tabel berikut. Jika Anda menggunakan pustaka ini dengan fungsi 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 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 Kripto Amazon Corretto |
2.4.1 |
2.4.1 |
| Penyedia Kripto Amazon Corretto FIPS |
2.4.1 |
2.4.1 |
Contoh berikut menunjukkan cara menggunakan CSPRNGs untuk menjamin urutan angka yang 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