Menyelesaikan masalah eksekusi di Lambda - AWS Lambda

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

Menyelesaikan masalah eksekusi di Lambda

Ketika runtime Lambda menjalankan kode fungsi Anda, kejadian mungkin diproses pada instans fungsi yang sedang memproses kejadian selama beberapa saat, atau mungkin memerlukan instans baru untuk diinisialisasi. Kesalahan dapat terjadi selama inisialisasi fungsi, ketika kode handler Anda memproses kejadian, atau ketika fungsi Anda mengembalikan (atau gagal mengembalikan) respons.

Kesalahan eksekusi fungsi dapat disebabkan oleh masalah dengan kode, konfigurasi fungsi, sumber daya hilir, atau izin Anda. Jika Anda memanggil fungsi secara langsung, Anda melihat kesalahan fungsi dalam respons dari Lambda. Jika Anda memanggil fungsi Anda secara asinkron, dengan pemetaan sumber kejadian, atau melalui layanan lain, Anda mungkin menemukan kesalahan di log, antrean surat gagal, atau tujuan saat terjadi kegagalan. Opsi penanganan kesalahan dan perilaku percobaan ulang berbeda-beda tergantung pada cara Anda memanggil fungsi dan jenis kesalahan.

Saat kode fungsi atau runtime Lambda Anda memunculkan kesalahan, kode status di respons dari Lambda adalah 200 OK. Adanya kesalahan dalam respons ditunjukkan dengan header bernama X-Amz-Function-Error. Kode status seri 400 dan 500 dicadangkan untuk kesalahan invokasi.

Lambda: Eksekusi memerlukan waktu yang lama

Masalah: Eksekusi fungsi membutuhkan waktu terlalu lama.

Jika kode Anda membutuhkan waktu lebih lama untuk dijalankan di Lambda daripada di mesin lokal Anda, kode mungkin dibatasi oleh memori atau daya pemrosesan yang tersedia untuk fungsi. Konfigurasikan fungsi dengan memori tambahan untuk menambah memori danCPU.

Lambda: Log atau jejak tidak muncul

Masalah: Log tidak muncul di CloudWatch Log.

Masalah: Jejak tidak muncul di AWS X-Ray.

Fungsi Anda memerlukan izin untuk memanggil CloudWatch Log dan X-Ray. Perbarui peran eksekusi untuk memberikan izin. Tambahkan kebijakan terkelola berikut untuk mengaktifkan log dan pelacakan.

  • AWSLambdaBasicExecutionRole

  • AWSXRayDaemonWriteAccess

Saat Anda menambahkan izin ke fungsi Anda, lakukan pembaruan sepele ke kode atau konfigurasinya juga. Ini memaksa instance menjalankan fungsi Anda, yang memiliki kredensialnya yang sudah ketinggalan zaman, untuk berhenti dan diganti.

catatan

Mungkin diperlukan 5 hingga 10 menit agar log muncul setelah pemanggilan fungsi.

Lambda: Tidak semua log fungsi saya muncul

Masalah: Log fungsi tidak ada di CloudWatch Log, meskipun izin saya benar

Jika Anda Akun AWS mencapai batas kuota CloudWatch Log, fungsi CloudWatch throttles logging berfungsi. Ketika ini terjadi, beberapa log yang dihasilkan oleh fungsi Anda mungkin tidak muncul di CloudWatch Log.

Jika fungsi Anda mengeluarkan log pada tingkat yang terlalu tinggi bagi Lambda untuk memprosesnya, ini juga dapat menyebabkan keluaran log tidak muncul di Log. CloudWatch Ketika Lambda tidak dapat mengirim log CloudWatch pada tingkat yang dihasilkan oleh fungsi Anda, Lambda akan menjatuhkan log untuk mencegah eksekusi fungsi Anda melambat. Berharap untuk secara konsisten mengamati log yang dijatuhkan ketika throughput log Anda melebihi 2 MB/s untuk satu aliran log.

Jika fungsi Anda dikonfigurasi untuk menggunakan log JSON yang diformat, Lambda mencoba mengirim logsDroppedperistiwa CloudWatch ke Log saat menjatuhkan log. Namun, saat CloudWatch membatasi logging fungsi Anda, peristiwa ini mungkin tidak mencapai CloudWatch Log, sehingga Anda tidak akan selalu melihat catatan saat Lambda menjatuhkan log.

Untuk memeriksa apakah Anda Akun AWS telah mencapai batas kuota CloudWatch Log, lakukan hal berikut:

  1. Buka Konsol Service Quotas.

  2. Di panel navigasi, pilih Layanan AWS .

  3. Dari daftar AWS layanan, cari Amazon CloudWatch Logs.

  4. Dalam daftar kuota Layanan, pilihCreateLogGroup throttle limit in transactions per second, CreateLogStream throttle limit in transactions per second dan PutLogEvents throttle limit in transactions per second kuota untuk melihat penggunaan Anda.

Anda juga dapat mengatur CloudWatch alarm untuk mengingatkan Anda ketika penggunaan akun Anda melebihi batas yang Anda tentukan untuk kuota ini. Lihat Membuat CloudWatch alarm berdasarkan ambang batas statis untuk mempelajari lebih lanjut.

Jika batas kuota default untuk CloudWatch Log tidak cukup untuk kasus penggunaan, Anda dapat meminta peningkatan kuota.

Lambda: Fungsi kembali sebelum eksekusi selesai

Masalah: (Node.js) Fungsi kembali sebelum kode menyelesaikan eksekusi

Banyak perpustakaan, termasuk, beroperasi secara AWS SDK asinkron. Ketika Anda melakukan panggilan jaringan atau melakukan operasi lain yang perlu menunggu respons, pustaka mengembalikan objek yang disebut janji, yang melacak kemajuan operasi di latar belakang.

Untuk menunggu janji selesai menjadi respons, gunakan kata kunci await. Ini menghalangi kode handler Anda beroperasi hingga janji diselesaikan menjadi objek yang berisi respons. Jika Anda tidak perlu menggunakan data dari respons dalam kode, Anda dapat mengembalikan janji secara langsung ke runtime.

Beberapa pustaka tidak mengembalikan janji, tetapi dapat dirangkum dalam kode yang mengembalikan janji. Untuk informasi selengkapnya, lihat Tentukan penangan fungsi Lambda di Node.js.

AWS SDK: Versi dan pembaruan

Masalah: Yang AWS SDK disertakan pada runtime bukanlah versi terbaru

Masalah: Yang AWS SDK disertakan pada pembaruan runtime secara otomatis

Runtime untuk bahasa scripting termasuk AWS SDK dan diperbarui secara berkala ke versi terbaru. Versi terkini untuk setiap runtime tercantum di halaman runtime. Untuk menggunakan versi yang lebih baru AWS SDK, atau untuk mengunci fungsi Anda ke versi tertentu, Anda dapat menggabungkan pustaka dengan kode fungsi Anda, atau membuat lapisan Lambda. Untuk perincian tentang pembuatan paket deployment dengan dependensi, lihat topik berikut:

Node.js

Deploy fungsi Lambda Node.js dengan arsip file .zip

Python

Bekerja dengan arsip file.zip untuk fungsi Python Lambda

Ruby

Deploy fungsi Lambda Ruby dengan arsip file .zip

Java

Menyebarkan fungsi Java Lambda JAR dengan.zip atau arsip file

Go

Deploy fungsi Go Lambda dengan arsip file .zip

C#

Bangun dan terapkan fungsi C# Lambda dengan arsip file.zip

PowerShell

Menyebarkan fungsi PowerShell Lambda dengan arsip file.zip

Python: Pustaka memuat dengan tidak benar

Masalah: (Python) Beberapa pustaka tidak memuat dengan benar dari paket deployment

Pustaka dengan modul ekstensi yang tertulis dalam C atau C++ harus disusun dalam lingkungan dengan arsitektur prosesor yang sama dengan Lambda (Amazon Linux). Untuk informasi selengkapnya, lihat Bekerja dengan arsip file.zip untuk fungsi Python Lambda.

Java: Fungsi Anda membutuhkan waktu lebih lama untuk memproses peristiwa setelah memperbarui ke Java 17 dari Java 11

Masalah: (Java) Fungsi Anda membutuhkan waktu lebih lama untuk memproses peristiwa setelah memperbarui ke Java 17 dari Java 11

Tune compiler Anda menggunakan JAVA_TOOL_OPTIONS parameter. Runtime Lambda untuk Java 17 dan versi Java yang lebih baru mengubah opsi kompiler default. Perubahan ini meningkatkan waktu mulai dingin untuk fungsi berumur pendek, tetapi perilaku sebelumnya lebih cocok untuk fungsi komputasi yang intensif dan berjalan lebih lama. Setel JAVA_TOOL_OPTIONS -XX:-TieredCompilation untuk kembali ke perilaku Java 11. Untuk informasi tentang parameter JAVA_TOOL_OPTIONS, lihat Memahami variabel JAVA_TOOL_OPTIONS lingkungan.