View a markdown version of this page

Memecahkan Masalah 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.

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 ExecutionEnvironmentVCPUUtilization tinggi, coba tambahkan lebih banyak vCPU per fungsi.

    aws lambda update-function \ --function-name my-function \ ... --memory-size 8192

    Jika ExecutionEnvironmentMemoryUtilization tinggi, 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 PutFunctionScalingConfig API 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 AtomicInteger atau AtomicLong untuk penghitung alih-alih tipe primitif

  • Ganti HashMap dengan ConcurrentHashMap

  • Gunakan Collections.synchronizedList() untuk membungkus ArrayList

  • Gunakan ThreadLocal untuk 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-store untuk semua status khusus permintaan

  • Ganti variabel global dengan InvokeStore.set() dan InvokeStore.get()

  • Gunakan nama file unik /tmp dengan 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 MemoryUtilization metrik di CloudWatch

  • Kurangi MaxConcurrency pengaturan 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 CPUUtilization dan MemoryUtilization pada tingkat penyedia kapasitas untuk mengidentifikasi kendala sumber daya.

  • Tinjau metrik kapasitas: vCPUAvailable Per iksa dan MemoryAvailable pastikan 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:

  1. Identifikasi semua versi fungsi menggunakan penyedia kapasitas dengan ListFunctionVersionsByCapacityProvider API.

  2. Hapus atau perbarui versi fungsi tersebut untuk menghapus asosiasi penyedia kapasitas.

  3. 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:PassCapacityProvider izin untuk penyedia kapasitas yang Anda coba gunakan.

  • Verifikasi konfigurasi penyedia kapasitas: Konfirmasikan bahwa penyedia kapasitas Anda berada dalam status AKTIF menggunakan GetCapacityProvider API.

  • 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)

  1. Buka konsol Amazon VPC di console.aws.amazon. com/vpc/.

  2. Di panel navigasi, pilih Titik Akhir.

  3. Pilih Buat Titik Akhir.

  4. Untuk kategori Layanan, pilih AWS layanan.

  5. Untuk Nama Layanan, pilih com.amazonaws.region.logs (ganti region dengan Wil AWS ayah Anda).

  6. Untuk VPC, pilih VPC yang digunakan oleh penyedia kapasitas Anda.

  7. Untuk Subnet, pilih subnet tempat Anda ingin membuat antarmuka jaringan titik akhir. Untuk mendapatkan ketersediaan tinggi, pilih subnet di beberapa Zona Ketersediaan.

  8. Untuk Grup keamanan, pilih grup keamanan yang mengizinkan lalu lintas HTTPS masuk (port 443) dari grup keamanan fungsi Anda.

  9. Aktif kan DNS Pri badi untuk titik akhir.

  10. Pilih Buat titik akhir.

Opsi 2: Subnet publik dengan gateway internet

Jika penyedia kapasitas Anda menggunakan subnet publik, pastikan:

  1. Gateway internet terpasang ke VPC Anda

  2. Tabel rute merutekan 0.0.0.0/0 lalu lintas ke gateway internet

  3. 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:

  1. Gerbang NAT ada di subnet publik

  2. Tabel rute subnet pribadi merutekan 0.0.0.0/0 lalu lintas ke gateway NAT

  3. Tabel rute subnet publik merutekan 0.0.0.0/0 lalu lintas ke gateway internet

  4. 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 ThreadContext untuk secara otomatis menyertakan ID permintaan

  • Node.js: Gunakan console.log() dengan pemformatan JSON dan sertakan InvokeStore.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:

  1. Tinjau CloudWatch metrik: Periksa penyedia kapasitas dan metrik lingkungan eksekusi untuk mengidentifikasi kendala sumber daya atau masalah penskalaan.

  2. Periksa AWS CloudTrail log: Tinjau CloudTrail log untuk informasi terperinci tentang panggilan dan kesalahan API.

  3. 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