Memecahkan masalah pemetaan sumber acara di 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 pemetaan sumber acara di Lambda

Masalah di Lambda yang berhubungan dengan pemetaan sumber peristiwa bisa lebih kompleks karena melibatkan debugging di beberapa layanan. Selain itu, perilaku sumber peristiwa dapat berbeda berdasarkan sumber peristiwa yang tepat yang digunakan. Bagian ini mencantumkan masalah umum yang melibatkan pemetaan sumber peristiwa, dan memberikan panduan tentang cara mengidentifikasi dan memecahkan masalah mereka.

catatan

Bagian ini menggunakan sumber peristiwa Amazon SQS untuk ilustrasi, tetapi prinsipnya berlaku untuk pemetaan sumber peristiwa lain yang mengantrekan pesan untuk fungsi Lambda.

Mengidentifikasi dan mengelola throttling

Di Lambda, pelambatan terjadi ketika Anda mencapai batas konkurensi fungsi atau akun Anda. Perhatikan contoh berikut, di mana ada fungsi Lambda yang membaca pesan dari antrian Amazon SQS. Fungsi Lambda ini mensimulasikan pemanggilan 30 detik, dan memiliki ukuran batch 1. Ini berarti bahwa fungsi hanya memproses 1 pesan setiap 30 detik:

const doWork = (ms) => new Promise(resolve => setTimeout(resolve, ms))

exports.handler = async (event) => {
    await doWork(30000)

}

Dengan waktu doa yang begitu lama, pesan mulai tiba dalam antrian lebih cepat daripada yang diproses. Jika konkurensi tanpa syarat akun Anda adalah 100, Lambda menskalakan hingga 100 eksekusi bersamaan, dan kemudian terjadi pembatasan. Anda dapat melihat pola ini di CloudWatch metrik untuk fungsi:

operasi debugging angka 10

CloudWatch metrik untuk fungsi tidak menunjukkan kesalahan, tetapi bagan eksekusi bersamaan menunjukkan bahwa konkurensi maksimum 100 tercapai. Akibatnya, bagan Throttles menunjukkan throttling di tempatnya.

Anda dapat mendeteksi pelambatan dengan CloudWatch alarm, dan mengatur alarm kapan saja metrik pelambatan untuk suatu fungsi lebih besar dari 0. Setelah mengidentifikasi masalah pelambatan, Anda memiliki beberapa opsi untuk resolusi:

  • Minta peningkatan konkurensi dari AWS Support di Wilayah ini.

  • Identifikasi masalah kinerja dalam fungsi untuk meningkatkan kecepatan pemrosesan dan karenanya meningkatkan throughput.

  • Tingkatkan ukuran batch fungsi, sehingga lebih banyak pesan diproses oleh setiap pemanggilan.

Kesalahan dalam fungsi pemrosesan

Jika fungsi pemrosesan melempar kesalahan, Lambda mengembalikan pesan ke antrian SQS. Lambda mencegah fungsi Anda dari penskalaan untuk mencegah kesalahan pada skala. Metrik SQS berikut CloudWatch menunjukkan masalah dengan pemrosesan antrian:

operasi debugging gambar 11

Secara khusus, usia pesan tertua dan jumlah pesan yang terlihat meningkat, sementara tidak ada pesan yang dihapus. Antrian terus bertambah tetapi pesan tidak diproses. CloudWatch Metrik untuk pemrosesan fungsi Lambda juga menunjukkan bahwa ada masalah:

operasi debugging gambar 12

Metrik jumlah kesalahan tidak nol dan berkembang, sementara eksekusi bersamaan telah berkurang dan pelambatan telah berhenti. Ini menunjukkan bahwa Lambda telah berhenti meningkatkan fungsi Anda karena kesalahan. CloudWatch Log untuk fungsi memberikan rincian jenis kesalahan.

Anda dapat mengatasi masalah ini dengan mengidentifikasi fungsi yang menyebabkan kesalahan, lalu menemukan dan menyelesaikan kesalahan. Setelah Anda memperbaiki kesalahan dan menerapkan kode fungsi baru, CloudWatch metrik akan menunjukkan pemulihan pemrosesan:

operasi debugging gambar 13

Di sini, metrik jumlah kesalahan turun menjadi nol dan metrik tingkat Sukses kembali ke 100%. Lambda mulai meningkatkan fungsi lagi, seperti yang ditunjukkan dalam grafik eksekusi bersamaan.

Mengidentifikasi dan menangani tekanan balik

Jika produser acara secara konsisten menghasilkan pesan untuk antrian SQS lebih cepat daripada fungsi Lambda yang dapat memprosesnya, tekanan balik terjadi. Dalam hal ini, pemantauan SQS harus menunjukkan usia pesan tertua yang tumbuh secara linier, bersama dengan perkiraan jumlah pesan yang terlihat. Anda dapat mendeteksi tekanan balik dalam antrian menggunakan alarm. CloudWatch

Langkah-langkah untuk mengatasi tekanan balik tergantung pada beban kerja Anda. Jika tujuan utamanya adalah untuk meningkatkan kemampuan pemrosesan dan throughput oleh fungsi Lambda, Anda memiliki beberapa opsi:

  • Minta peningkatan konkurensi di Wilayah tertentu dari AWS Support.

  • Tingkatkan ukuran batch fungsi, sehingga lebih banyak pesan diproses oleh setiap pemanggilan.