Menangani keunikan dengan Lambda SnapStart - AWS Lambda

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. 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 Anda, hindari caching data yang dimaksudkan untuk menjadi unik, seperti membuat ID unik untuk logging. Sebagai gantinya, kami menyarankan Anda menghasilkan data unik di dalam penangan fungsi Anda atau menggunakan kait runtime.

contoh — Menghasilkan ID unik di function handler

Contoh berikut menunjukkan bagaimana untuk menghasilkan UUID dalam handler fungsi.

import java.util.UUID; public class Handler implements RequestHandler<String, String> { private static UUID uniqueSandboxId = null; @Override public String handleRequest(String event, Context context) { if (uniqueSandboxId == null) uniqueSandboxId = UUID.randomUUID(); System.out.println("Unique Sandbox Id: " + uniqueSandboxId); return "Hello, World!"; } }

Gunakan generator nomor pseudorandom yang aman secara kriptografis (CSPRNGs)

Jika aplikasi Anda bergantung pada keacakan, kami sarankan Anda menggunakan generator nomor acak yang aman secara kriptografis (CSPRNGs). Runtime terkelola Lambda untuk Java mencakup dua CSPrNGS bawaan (OpenSSL 1.0.2 dan) yang secara otomatis mempertahankan keacakan dengan. java.security.SecureRandom SnapStart Perangkat lunak yang selalu mendapatkan angka acak dari /dev/random atau /dev/urandom juga mempertahankan keacakan dengan SnapStart.

contoh — java.security. SecureRandom

Contoh berikut menggunakanjava.security.SecureRandom, yang menghasilkan urutan nomor unik bahkan ketika fungsi dipulihkan dari snapshot.

import java.security.SecureRandom; public class Handler implements RequestHandler<String, String> { private static SecureRandom rng = new SecureRandom(); @Override public String handleRequest(String event, Context context) { for (int i = 0; i < 10; i++) { System.out.println(rng.next()); } return "Hello, World!"; } }

SnapStart alat pemindaian

Lambda menyediakan alat pemindaian untuk membantu Anda memeriksa kode yang mengasumsikan keunikan. Alat SnapStart pemindaian adalah SpotBugsplugin sumber terbuka yang menjalankan analisis statis terhadap seperangkat aturan. Alat pemindaian membantu mengidentifikasi implementasi kode potensial yang mungkin mematahkan asumsi mengenai keunikan. Untuk petunjuk penginstalan dan daftar pemeriksaan yang dilakukan alat pemindaian, lihat repositori aws-lambda-snapstart-java-rules aktif. GitHub

Untuk mempelajari lebih lanjut tentang menangani keunikan dengan SnapStart, lihat Memulai lebih cepat dengan AWS Lambda SnapStart di AWS Compute Blog.