Praktik terbaik untuk Instans Terkelola Lambda - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Praktik terbaik untuk Instans Terkelola Lambda

Konfigurasi penyedia kapasitas

Pisahkan penyedia kapasitas berdasarkan tingkat kepercayaan. Buat penyedia kapasitas yang berbeda untuk beban kerja dengan persyaratan keamanan yang berbeda. Semua fungsi yang ditetapkan untuk penyedia kapasitas yang sama harus saling dipercaya, karena penyedia kapasitas berfungsi sebagai batas keamanan.

Gunakan nama deskriptif. Sebutkan penyedia kapasitas untuk secara jelas menunjukkan tujuan penggunaan dan tingkat kepercayaan mereka (misalnya,production-trusted,dev-sandbox). Ini membantu tim memahami tujuan dan postur keamanan masing-masing penyedia kapasitas.

Gunakan beberapa Availability Zone. Tentukan subnet di beberapa Availability Zone saat membuat penyedia kapasitas. Lambda meluncurkan tiga instans secara default untuk ketahanan AZ, memastikan ketersediaan tinggi untuk fungsi Anda.

Pemilihan tipe instans

Biarkan Lambda memilih jenis instance. Secara default, Lambda memilih jenis instans terbaik untuk beban kerja Anda. Sebaiknya izinkan Instans Terkelola Lambda memilih jenis instans untuk Anda, karena membatasi jumlah kemungkinan jenis instans dapat mengakibatkan ketersediaan lebih rendah.

Tentukan jenis instance untuk persyaratan tertentu. Jika Anda memiliki persyaratan perangkat keras tertentu, setel jenis instans yang diizinkan ke daftar instance yang kompatibel. Contoh:

  • Untuk aplikasi yang membutuhkan bandwidth jaringan tinggi, pilih beberapa jenis instans n

  • Untuk lingkungan pengujian atau pengembangan dengan batasan biaya, pilih jenis instans yang lebih kecil seperti m7a.large

Konfigurasi fungsi

Pilih pengaturan memori dan vCPU yang sesuai. Pilih konfigurasi memori dan vCPU yang mendukung eksekusi multi-konkuren fungsi Anda. Ukuran fungsi minimum yang didukung adalah 2GB dan 1 vCPU.

  • Untuk aplikasi Python, pilih rasio memori yang lebih tinggi terhadap v CPUs (seperti 4 banding 1 atau 8 banding 1) karena cara Python menangani multi-konkurensi

  • Untuk operasi intensif CPU atau fungsi yang melakukan sedikit IO, pilih lebih dari satu vCPU

  • Untuk aplikasi IO-berat seperti layanan web atau pekerjaan batch, multi-konkurensi memberikan manfaat paling besar

Konfigurasikan konkurensi maksimum dengan tepat. Lambda memilih default yang masuk akal untuk konkurensi maksimum yang menyeimbangkan konsumsi sumber daya dan throughput. Sesuaikan pengaturan ini berdasarkan penggunaan sumber daya fungsi Anda:

  • Tingkatkan konkurensi maksimum (hingga 64 per vCPU) jika pemanggilan fungsi Anda menggunakan CPU yang sangat sedikit

  • Kurangi konkurensi maksimum jika aplikasi Anda mengkonsumsi sejumlah besar memori dan sangat sedikit CPU

Perhatikan bahwa lingkungan eksekusi dengan konkurensi yang sangat rendah mungkin mengalami throttle dan kesulitan penskalaan.

Konfigurasi penskalaan

Tetapkan pemanfaatan sumber daya target yang tepat. Secara default, Lambda mempertahankan ruang kepala yang cukup untuk lalu lintas Anda berlipat ganda dalam waktu 5 menit tanpa throttle. Sesuaikan ini berdasarkan karakteristik beban kerja Anda:

  • Untuk beban kerja yang sangat stabil atau aplikasi yang tidak sensitif terhadap throttle, tetapkan target ke tingkat tinggi untuk mencapai pemanfaatan yang lebih tinggi dan biaya yang lebih rendah

  • Untuk beban kerja dengan potensi ledakan lalu lintas, tetapkan target sumber daya ke tingkat rendah untuk mempertahankan ruang kepala tambahan

Rencanakan pertumbuhan lalu lintas. Jika lalu lintas Anda lebih dari dua kali lipat dalam 5 menit, Anda mungkin melihat throttle saat Lambda meningkatkan instance dan lingkungan eksekusi. Rancang aplikasi Anda untuk menangani potensi pelambatan selama periode peningkatan skala yang cepat.

Keamanan

Terapkan hak istimewa paling sedikit untuk PassCapacityProvider izin. Berikan lambda:PassCapacityProvider izin hanya untuk penyedia kapasitas yang diperlukan. Gunakan izin tingkat sumber daya untuk membatasi penyedia kapasitas mana yang dapat ditetapkan pengguna ke fungsi.

Pantau penggunaan penyedia kapasitas. Gunakan AWS CloudTrail untuk memantau tugas penyedia kapasitas dan pola akses. Ini membantu mengidentifikasi upaya akses yang tidak sah dan memastikan kepatuhan terhadap kebijakan keamanan.

Pisahkan beban kerja yang tidak tepercaya. Jangan mengandalkan kontainer untuk isolasi keamanan antara beban kerja yang tidak tepercaya. Gunakan penyedia kapasitas yang berbeda untuk memisahkan beban kerja yang tidak saling dipercaya.

Optimalisasi biaya

Opsi EC2 harga leverage. Manfaatkan EC2 Savings Plans dan Reserved Instances untuk mengurangi biaya. Opsi penetapan harga ini berlaku untuk EC2 komputasi yang mendasarinya (biaya manajemen 15% tidak didiskon).

Optimalkan untuk beban kerja kondisi mapan. Instans Terkelola Lambda paling cocok untuk fungsi kondisi mapan dengan lalu lintas volume tinggi yang dapat diprediksi. Untuk pola lalu lintas yang meledak, Lambda (default) mungkin lebih hemat biaya.

Pantau pemanfaatan sumber daya. Lacak CloudWatch metrik untuk memahami pemanfaatan CPU dan memori. Sesuaikan alokasi memori fungsi dan pemilihan jenis instans berdasarkan pola penggunaan aktual untuk mengoptimalkan biaya.

Pemantauan dan observabilitas

Pantau metrik penyedia kapasitas. Lacak metrik tingkat penyedia kapasitas termasuk CPUUtilization, MemoryUtilization, vCPUAvailable, dan MemoryAvailable untuk memastikan sumber daya yang cukup tersedia untuk beban kerja Anda.

Pantau metrik lingkungan eksekusi. Lacak metrik tingkat lingkungan eksekusi termasuk ExecutionEnvironmentConcurrency dan ExecutionEnvironmentConcurrencyLimit untuk memahami perilaku penskalaan dan mengidentifikasi potensi pelambatan.

Mengatur CloudWatch alarm. Buat CloudWatch alarm untuk metrik utama untuk mengidentifikasi masalah secara proaktif:

  • Pemanfaatan CPU atau memori yang tinggi

  • Kapasitas yang tersedia rendah

  • Mendekati batas konkurensi

Pertimbangan khusus runtime

Ikuti praktik terbaik khusus runtime. Setiap runtime menangani multi-konkurensi secara berbeda. Tinjau panduan khusus runtime untuk rekomendasi terperinci:

  • Java: Gunakan koleksi aman utas,AtomicInteger, dan ThreadLocal untuk status khusus permintaan

  • Node.js: Gunakan InvokeStore untuk semua status khusus permintaan dan hindari variabel global

  • Python: Gunakan nama file unik /tmp dengan permintaan IDs dan pertimbangkan isolasi memori berbasis proses

Uji keamanan benang dan masalah konkurensi. Sebelum menerapkan ke produksi, uji fungsi Anda secara menyeluruh untuk masalah keselamatan benang, kondisi balapan, dan isolasi status yang tepat di bawah beban bersamaan.

Langkah selanjutnya