Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memecahkan Masalah Instans Terkelola Lambda
Masalah pelambatan dan penskalaan
Pelambatan sesekali
Masalah: Anda mengalami kesalahan pelambatan (HTTP 429) selama operasi normal.
Penyebab: Inst ans Terkelola Lambda mungkin menolak panggilan baru untuk melindungi panggilan yang sudah dalam penerbangan. Jika lingkungan eksekusi Anda memiliki pemanfaatan tinggi secara konsisten, pemanggilan baru mungkin dibatasi.
Solusi:
-
Memantau metrik penskalaan: Per iksa grafik Throttle Reasons untuk memahami alasan pembatasan dan masalah penskalaan kapasitas. Dalam contoh berikut, CPU tinggi menyebabkan throttle.
-
Tinjau konfigurasi fungsi: Pastikan memori fungsi dan pengaturan vCPU mendukung eksekusi multi-bersamaan. Tingkatkan memori fungsi atau alokasi vCPU jika diperlukan. Jika
ExecutionEnvironmentVCPUUtilizationtinggi, coba tambahkan lebih banyak vCPU per fungsi.aws lambda update-function \ --function-name my-function \ ... --memory-size 8192Jika
ExecutionEnvironmentMemoryUtilizationtinggi, coba tambahkan lebih banyak memori per vCPU:aws lambda update-function \ --function-name my-function \ --capacity-provider-config '{ "LambdaManagedInstancesCapacityProviderConfig": { "ExecutionEnvironmentMemoryGiBPerVCpu": 4.0 } }'
Throttle selama peningkatan skala
Masalah: Anda mengalami kesalahan pelambatan (HTTP 429) ketika lalu lintas meningkat dengan cepat.
Penyebab: Lambda Managed Instances menskalakan secara asinkron berdasarkan pemanfaatan sumber daya CPU dan saturasi multi-konkurensi. Jika lalu lintas Anda lebih dari dua kali lipat dalam waktu 5 menit, Anda mungkin melihat pembatasan saat Lambda meningkatkan instans dan lingkungan eksekusi untuk memenuhi permintaan.
Solusi:
-
Sesuaikan pemanfaatan sumber daya target: Jika beban kerja Anda memiliki pola lalu lintas yang dapat diprediksi, tetapkan pemanfaatan sumber daya target yang lebih rendah untuk mempertahankan ruang tambahan untuk ledakan lalu lintas.
aws lambda create-capacity-provider \ --name my-capacity-provider \ ... --capacity-provider-scaling-config '{ "ScalingMode": "Manual", "ScalingPolicies": [ { "PredefinedMetricType": "LambdaCapacityProviderAverageCPUUtilization", "TargetValue": 30.0 } ] }' -
Pre-warm kapasitas: Untuk peningkatan lalu lintas yang direncanakan, gunakan
PutFunctionScalingConfigAPI untuk melakukan pra-pemanasan kapasitas tambahan.aws lambda put-function-scaling-config \ --function-name my-function \ --qualifier 1 \ --function-scaling-config '{ "MinExecutionEnvironments": 100 }'
Menurunkan skala lambat
Masalah: Instans membutuhkan waktu lama untuk diturunkan setelah lalu lintas berkurang.
Penyebab: Lambda Managed Instances akan menurunkan skala secara bertahap untuk menjaga ketersediaan dan menghindari perubahan kapasitas yang cepat yang dapat memengaruhi kinerja.
Solusi:
Ini adalah perilaku yang diharapkan. Lambda mengurangi instance secara konservatif untuk memastikan stabilitas. Pantau CloudWatch metrik Anda untuk melacak jumlah instans yang sedang berjalan.
Masalah konkurensi
Lingkungan eksekusi dengan pengalaman konkurensi rendah membatasi
Masalah: Fungsi Anda mengalami pelambatan meskipun memiliki kapasitas yang tersedia.
Penyebab: Lingkungan eksekusi dengan konkurensi maksimum yang sangat rendah mungkin mengalami kesulitan melakukan penskalaan secara efektif. Instans Terkelola Lambda dirancang untuk aplikasi multi-concurrent.
Solusi:
-
Tingkatkan konkurensi maksimum: Jika pemanggilan fungsi Anda menggunakan CPU yang sangat sedikit, tingkatkan pengaturan konkurensi maksimum hingga 64 per vCPU.
aws lambda update-function \ --function-name ordering-api-backend \ --capacity-provider-config '{ "LambdaManagedInstancesCapacityProviderConfig": { "PerExecutionEnvironmentMaxConcurrency": 32 } }' -
Optimalkan kode fungsi: T injau kode fungsi Anda untuk mengurangi konsumsi CPU per pemanggilan, memungkinkan konkurensi yang lebih tinggi.
-
Sesuaikan memori fungsi dan vCPU: Pastikan fungsi Anda memiliki sumber daya yang cukup untuk menangani beberapa pemanggilan bersamaan.
Masalah keamanan utas (runtime Java)
Masalah: Fungsi Java Anda menghasilkan hasil yang salah atau mengalami kondisi balapan di bawah beban.
Penyebab: Beberapa utas mengeksekusi metode handler secara bersamaan, dan status bersama tidak aman untuk utas.
Solusi:
-
Gunakan
AtomicIntegeratauAtomicLonguntuk penghitung alih-alih tipe primitif -
Ganti
HashMapdenganConcurrentHashMap -
Gunakan
Collections.synchronizedList()untuk membungkusArrayList -
Gunakan
ThreadLocaluntuk status khusus permintaan -
Akses ID jejak dari objek Lambda Context, bukan variabel lingkungan
Untuk panduan terperinci, lihat dokumentasi runtime Java untuk Lambda Managed Instances.
Masalah isolasi status (Node.js runtime)
Masalah: Node.js Fungsi Anda mengembalikan data dari permintaan yang berbeda atau mengalami kerusakan data.
Penyebab: Vari abel global dibagikan di seluruh pemanggilan bersamaan pada utas pekerja yang sama. Ketika operasi asinkron menghasilkan kontrol, pemanggilan lain dapat memodifikasi status bersama.
Solusi:
-
Instal dan gunakan
@aws/lambda-invoke-storeuntuk semua status khusus permintaan -
Ganti variabel global dengan
InvokeStore.set()danInvokeStore.get() -
Gunakan nama file unik
/tmpdengan ID permintaan -
Akses ID jejak menggunakan al
InvokeStore.getXRayTraceId()ih-alih variabel lingkungan
Untuk panduan terperinci, lihat dokumentasi Node.js runtime untuk Lambda Managed Instances.
Konflik file (runtime Python)
Masalah: Fungsi Python Anda membaca data yang salah dari file di/tmp.
Penyebab: Beberapa proses berbagi /tmp direktori. Menulis secara bersamaan ke file yang sama dapat menyebabkan kerusakan data.
Solusi:
-
Gunakan nama file unik dengan ID permintaan:
/tmp/request_{context.request_id}.txt -
Gunakan penguncian file dengan
fcntl.flock()untuk file bersama -
Bersihkan file sementara
os.remove()setelah digunakan
Untuk panduan terperinci, lihat dokumentasi runtime Python untuk Lambda Managed Instances.
Masalah kinerja
Pemanfaatan memori tinggi
Masalah: Fungsi Anda mengalami pemanfaatan memori yang tinggi atau kesalahan kehabisan memori.
Penyebab: Setiap permintaan bersamaan di Python berjalan dalam proses terpisah dengan ruang memori sendiri. Total penggunaan memori sama dengan memori per proses dikalikan dengan proses bersamaan.
Solusi:
-
Pantau
MemoryUtilizationmetrik di CloudWatch -
Kurangi
MaxConcurrencypengaturan jika penggunaan memori mendekati batas memori fungsi -
Tingkatkan alokasi memori fungsi untuk mendukung konkurensi yang lebih tinggi
-
Optimalkan penggunaan memori dengan memuat data sesuai permintaan alih-alih selama inisialisasi
Kinerja yang tidak konsisten
Masalah: Kin erja fungsi bervariasi secara signifikan antara pemanggilan.
Penyebab: Lambda mungkin memilih jenis instans yang berbeda berdasarkan ketersediaan, atau fungsi mungkin berjalan pada instans dengan ketersediaan sumber daya yang bervariasi.
Solusi:
-
Tentukan jenis instans yang diizinkan: Jika Anda memiliki persyaratan kinerja tertentu, konfigurasikan jenis instans yang diizinkan di penyedia kapasitas Anda untuk membatasi jenis instans yang dapat dipilih Lambda.
-
Memantau metrik tingkat instance: Lacak
CPUUtilizationdanMemoryUtilizationpada tingkat penyedia kapasitas untuk mengidentifikasi kendala sumber daya. -
Tinjau metrik kapasitas:
vCPUAvailablePer iksa danMemoryAvailablepastikan sumber daya yang cukup tersedia di instans Anda.
Masalah penyedia kapasitas
Versi fungsi gagal menjadi AKTIF
Masalah: Versi fungsi Anda tetap dalam keadaan tertunda setelah penerbitan.
Penyebab: Lambda meluncurkan Instans Terkelola dan memulai lingkungan eksekusi. Proses ini membutuhkan waktu, terutama untuk versi fungsi pertama pada penyedia kapasitas baru.
Solusi:
Tunggu Lambda menyelesaikan proses inisialisasi. Lambda meluncurkan tiga instance secara default untuk ketahanan AZ dan memulai tiga lingkungan eksekusi sebelum menandai versi fungsi Anda AKTIF. Ini biasanya memerlukan waktu beberapa menit.
Tidak dapat menghapus penyedia kapasitas
Masalah: Anda menerima kesalahan saat mencoba menghapus penyedia kapasitas.
Penyebab: Anda tidak dapat menghapus penyedia kapasitas yang memiliki versi fungsi yang dilampirkan padanya.
Solusi:
-
Identifikasi semua versi fungsi menggunakan penyedia kapasitas dengan
ListFunctionVersionsByCapacityProviderAPI. -
Hapus atau perbarui versi fungsi tersebut untuk menghapus asosiasi penyedia kapasitas.
-
Coba lagi menghapus penyedia kapasitas.
Pesan kesalahan umum selama penerbitan fungsi
Masalah: Anda menemukan pesan kesalahan umum seperti “Terjadi kesalahan internal selama penerbitan” saat menerbitkan fungsi.
Solusi:
-
Periksa izin IAM: Pastikan Anda memiliki
lambda:PassCapacityProviderizin untuk penyedia kapasitas yang Anda coba gunakan. -
Verifikasi konfigurasi penyedia kapasitas: Konfirmasikan bahwa penyedia kapasitas Anda berada dalam status AKTIF menggunakan
GetCapacityProviderAPI. -
Tinjau konfigurasi VPC: Pastikan subnet dan grup keamanan yang ditentukan di penyedia kapasitas Anda dikonfigurasi dan dapat diakses dengan benar.
-
Periksa AWS CloudTrail log: Tinjau CloudTrail log untuk informasi kesalahan terperinci tentang operasi yang gagal.
Masalah pemantauan dan pengamatan
CloudWatch Metrik yang hilang
Masalah: Anda tidak melihat metrik yang diharapkan CloudWatch untuk penyedia kapasitas atau fungsi Anda.
Penyebab: Metrik dipublikasikan pada interval 5 menit. Penyedia kapasitas atau fungsi baru mungkin tidak memiliki metrik yang tersedia segera.
Solusi:
Tunggu setidaknya 5-10 menit setelah menerbitkan versi fungsi sebelum mengharapkan metrik muncul di CloudWatch. Pastikan Anda melihat namespace (AWS/Lambda) dan dimensi (CapacityProviderName,FunctionName, atauInstanceType) yang benar.
Tidak dapat menemukan CloudWatch log
Masalah: Fungsi Anda berhasil dijalankan, tetapi Anda tidak dapat menemukan CloudWatch log di Log.
Penyebab: Inst ans Terkelola Lambda berjalan di VPC Anda dan memerlukan konektivitas jaringan untuk mengirim log ke CloudWatch Log. Tanpa konfigurasi konektivitas VPC yang tepat, fungsi Anda tidak dapat mencapai titik akhir layanan CloudWatch Logs.
Solusi:
Konfigurasikan konektivitas VPC untuk mengaktifkan fungsi Anda mengirim log ke CloudWatch Log. Anda memiliki tiga opsi:
Opsi 1: Titik akhir VPC untuk CloudWatch Log (direkomendasikan untuk produksi)
-
Buka konsol Amazon VPC di console.aws.amazon. com/vpc/
. -
Di panel navigasi, pilih Titik Akhir.
-
Pilih Buat Titik Akhir.
-
Untuk kategori Layanan, pilih AWS layanan.
-
Untuk Nama Layanan, pilih
com.amazonaws.region.logs(gantiregiondengan Wil AWS ayah Anda). -
Untuk VPC, pilih VPC yang digunakan oleh penyedia kapasitas Anda.
-
Untuk Subnet, pilih subnet tempat Anda ingin membuat antarmuka jaringan titik akhir. Untuk mendapatkan ketersediaan tinggi, pilih subnet di beberapa Zona Ketersediaan.
-
Untuk Grup keamanan, pilih grup keamanan yang mengizinkan lalu lintas HTTPS masuk (port 443) dari grup keamanan fungsi Anda.
-
Aktif kan DNS Pri badi untuk titik akhir.
-
Pilih Buat titik akhir.
Opsi 2: Subnet publik dengan gateway internet
Jika penyedia kapasitas Anda menggunakan subnet publik, pastikan:
-
Gateway internet terpasang ke VPC Anda
-
Tabel rute merutekan
0.0.0.0/0lalu lintas ke gateway internet -
Grup keamanan mengizinkan lalu lintas HTTPS keluar pada port 443
Opsi 3: Subnet pribadi dengan gateway NAT
Jika penyedia kapasitas Anda menggunakan subnet pribadi, pastikan:
-
Gerbang NAT ada di subnet publik
-
Tabel rute subnet pribadi merutekan
0.0.0.0/0lalu lintas ke gateway NAT -
Tabel rute subnet publik merutekan
0.0.0.0/0lalu lintas ke gateway internet -
Grup keamanan mengizinkan lalu lintas HTTPS keluar pada port 443
Untuk panduan terperinci tentang opsi konektivitas VPC, lihat Konektivitas VPC untuk Instans Terkelola Lambda.
Kesulitan menghubungkan log dari permintaan bersamaan
Masalah: Log dari permintaan yang berbeda disisipkan, sehingga sulit untuk melacak permintaan individu.
Penyebab: Inter leaving log diharapkan dan perilaku standar dalam sistem multi-bersamaan.
Solusi:
-
Gunakan logging terstruktur dengan format JSON: Sertakan ID permintaan di semua pernyataan log
-
Java: Gunakan Log4j dengan
ThreadContextuntuk secara otomatis menyertakan ID permintaan -
Node.js: Gunakan
console.log()dengan pemformatan JSON dan sertakanInvokeStore.getRequestId() -
Python: Gunakan modul logging standar dengan pemformatan JSON dan sertakan
context.request_id
Untuk panduan terperinci, lihat halaman dokumentasi khusus runtime.
Mendapatkan bantuan tambahan
Jika Anda terus mengalami masalah setelah mencoba solusi ini:
-
Tinjau CloudWatch metrik: Periksa penyedia kapasitas dan metrik lingkungan eksekusi untuk mengidentifikasi kendala sumber daya atau masalah penskalaan.
-
Periksa AWS CloudTrail log: Tinjau CloudTrail log untuk informasi terperinci tentang panggilan dan kesalahan API.
-
Hu AWS bungi Dukungan: Jika Anda tidak dapat menyelesaikan masalah, AWS hubungi Dukungan dengan rincian tentang konfigurasi penyedia kapasitas Anda, konfigurasi fungsi, dan pesan kesalahan spesifik yang Anda temui.
Langkah selanjutnya
-
Pelajari tentang penyedia kapasitas untuk Instans Terkelola Lambda
-
Tinjau panduan khusus runtime untuk Java, Node.js, dan Python Runtime Python untuk Instans Terkelola Lambda
-
Memantau Instans Terkelola Lambda dengan metrik CloudWatch
-
Tinjau praktik terbaik untuk Instans Terkelola Lambda