View a markdown version of this page

Praktik terbaik untuk bekerja dengan AWS Lambda fungsi - 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 bekerja dengan AWS Lambda fungsi

Berikut adalah praktik terbaik yang direkomendasikan untuk menggunakan AWS Lambda:

Kode fungsi

Manfaatkan penggunaan kembali lingkungan eksekusi untuk meningkatkan kinerja fungsi Anda. Inisialisasi klien SDK dan koneksi basis data di luar fungsi handler, dan lakukan caching aset statis secara lokal di direktori /tmp. Invokasi selanjutnya yang diproses oleh instans yang sama dari fungsi Anda dapat menggunakan kembali sumber daya ini. Ini menghemat biaya dengan mengurangi waktu pengoperasian fungsi.

Untuk menghindari potensi kebocoran data di seluruh invokasi, jangan menggunakan lingkungan eksekusi untuk menyimpan data pengguna, peristiwa, atau informasi lainnya implikasi keamanan. Jika fungsi Anda bergantung pada status yang dapat disenyapkan yang tidak dapat disimpan dalam memori di dalam handler, pertimbangkan untuk membuat fungsi terpisah atau versi terpisah dari fungsi untuk setiap pengguna.

Gunakan direktif keep-alive untuk mempertahankan koneksi yang persisten. Lambda membersihkan koneksi idle dari waktu ke waktu. Mencoba menggunakan ulang koneksi idle saat mengidentifikasi suatu fungsi akan menyebabkan kesalahan koneksi. Untuk mempertahankan koneksi yang persisten, gunakan arahan tetap aktif yang berkaitan dengan runtime Anda. Sebagai contoh, lihat Menggunakan Kem bali Koneksi dengan Keep-Alive in Node.js.

Gunakan variabel lingkungan untuk meneruskan parameter operasional ke fungsi Anda. Misalnya, jika Anda ingin menulis ke bucket Amazon S3 alih-alih melakukan hard-coding nama bucket yang Anda tulis, konfigurasikan nama bucket sebagai variabel lingkungan.

Hindari menggunakan pemanggilan rekursif dalam fungsi Lambda Anda, di mana fungsi memanggil dirinya sendiri atau memulai proses yang dapat memanggil fungsi lagi. Hal ini dapat menyebabkan volume invokasi fungsi yang tidak diinginkan dan peningkatan biaya. Jika Anda melihat volume pemanggilan yang tidak diinginkan, setel fungsi reservasi konkurensi ke 0 segera untuk membatasi semua pemanggilan ke fungsi, saat Anda memperbarui kode.

Jangan gunakan API non-publik yang tidak terdokumentasi dalam kode fungsi Lambda Anda. Untuk runtime AWS Lambda terkelola, Lambda secara berkala menerapkan pembaruan keamanan dan fungsional ke API internal Lambda. Pembaruan API internal ini mungkin tidak kompatibel ke belakang, yang menyebabkan konsekuensi yang tidak diinginkan seperti kegagalan pemanggilan jika fungsi Anda memiliki ketergantungan pada API non-publik ini. Lihat referensi API untuk daftar API yang tersedia untuk umum.

Tulis kode idempotent. Menulis kode idempotent untuk fungsi Anda memastikan bahwa peristiwa duplikat ditangani dengan cara yang sama. Kode Anda harus memvalidasi peristiwa dengan benar dan menangani peristiwa duplikat dengan anggun. Untuk informasi lebih lanjut, lihat Bagaimana cara membuat fungsi Lambda saya idempoten? .

catatan

Anda dapat menggunakan Powertools AWS Lambda untuk membuat fungsi idempoten. Untuk informasi selengkapnya, lihat:

Untuk praktik terbaik kode khusus bahasa, lihat bagian berikut:

Konfigurasi fungsi

Pengujian kinerja fungsi Lambda Anda merupakan bagian penting dalam memastikan Anda memilih konfigurasi ukuran memori yang optimal. Peningkatan ukuran memori apa pun memicu peningkatan CPU yang setara yang tersedia untuk fungsi Anda. Penggunaan memori untuk fungsi Anda ditentukan per panggilan dan dapat dilihat di Amazon. CloudWatch Pada setiap pemanggilan sebuah REPORT: entri dibuat, seperti yang ditunjukkan di bawah ini:

REPORT RequestId: 3604209a-e9a3-11e6-939a-754dd98c7be3 Duration: 12.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB

Dengan menganalisis bidang Max Memory Used:, Anda dapat menentukan apakah fungsi Anda perlu memori lebih besar atau jika ukuran memori fungsi Anda disediakan secara berlebihan.

Untuk menemukan konfigurasi memori yang tepat untuk fungsi Anda, sebaiknya gunakan proyek AWS Lambda Power Tuning sumber terbuka. Untuk informasi selengkapnya, lihat AWS Lambda Power Tuning aktif GitHub.

Untuk mengoptimalkan kinerja fungsi, kami juga merekomendasikan penerapan pustaka yang dapat menggunakan Advanced Vector Extensions 2 (AVX2). Dengan ini, Anda dapat memproses beban kerja yang menuntut, termasuk inferensi pembelajaran mesin, pemrosesan media, komputasi kinerja tinggi (HPC), simulasi ilmiah, dan pemodelan keuangan. Untuk informasi selengkapnya, lihat Membuat AWS Lambda fungsi yang lebih cepat dengan AVX2.

Uji muatan fungsi Lambda Anda untuk menentukan nilai waktu habis yang optimal. Penting untuk menganalisis berapa lama fungsi Anda berjalan sehingga Anda dapat lebih menentukan masalah dengan layanan ketergantungan yang mungkin meningkatkan konkurensi fungsi melebihi apa yang Anda harapkan. Ini sangat penting ketika fungsi Lambda Anda membuat panggilan jaringan ke sumber daya yang mungkin tidak menangani penskalaan Lambda. Untuk informasi selengkapnya tentang pengujian beban aplikasi Anda, lihat Pengujian Beban Terdistribusi pada AWS.

Gunakan izin yang paling membatasi saat menyetel kebijakan IAM. Pahami sumber daya dan operasional kebutuhan fungsi Lambda Anda, dan batasi peran eksekusi ke izin ini. Untuk informasi selengkapnya, lihat Mengelola izin di AWS Lambda.

Akrab denganKuota Lambda. Ukuran muatan, deskriptor file, dan ruang /tmp sering diabaikan saat menentukan batas sumber daya runtime.

Hapus fungsi Lambda yang tidak lagi Anda gunakan. Dengan melakukannya, fungsi yang tidak digunakan tidak dihitung sia-sia terhadap batas ukuran paket deployment Anda.

Jika Anda menggunakan Amazon Simple Queue Service sebagai sumber peristiwa, pastikan nilai dari waktu invokasi fungsi yang diharapkan tidak melebihi nilai Visibility Timeout di antrean. Ini berlaku baik untuk CreateFunction dan UpdateFunctionConfiguration.

  • Dalam kasus CreateFunction, AWS Lambda gagal proses pembuatan fungsi.

  • Dalam hal UpdateFunctionConfiguration, ini dapat menyebabkan invokasi ganda dari fungsi.

Skalabilitas fungsi

Kenali kendala throughput hulu dan hilir Anda. Sementara fungsi Lambda berskala mulus dengan beban, dependensi hulu dan hilir mungkin tidak memiliki kemampuan throughput yang sama. Jika Anda perlu membatasi seberapa tinggi fungsi Anda dapat menskalakan, Anda dapat mengonfigurasi konkurensi yang dicadangkan pada fungsi Anda.

Bangun toleransi throttle. Jika fungsi sinkron mengalami pelambatan karena lalu lintas melebihi tingkat penskalaan Lambda, Anda dapat menggunakan strategi berikut untuk meningkatkan toleransi throttle:

  • Gunakan batas waktu, percobaan ulang, dan mundur dengan jitter. Menerapkan strategi ini memperlancar pemanggilan yang dicoba ulang, dan membantu memastikan Lambda dapat meningkatkan skala dalam hitungan detik untuk meminimalkan pelambatan pengguna akhir.

  • Gunakan konkur ensi yang disediakan. Konkurensi yang disediakan adalah jumlah lingkungan eksekusi pra-inisialisasi yang dialokasikan Lambda ke fungsi Anda. Lambda menangani permintaan masuk menggunakan konkurensi yang disediakan bila tersedia. Lambda juga dapat menskalakan fungsi Anda di atas dan di luar pengaturan konkurensi yang disediakan jika diperlukan. Mengkonfigurasi konkurensi yang disediakan akan dikenakan biaya tambahan ke akun Anda. AWS

Metrik dan alarm

Gunakan Menggunakan CloudWatch metrik dengan Lambda dan CloudWatch Alarm alih-alih membuat atau memperbarui metrik dari dalam kode fungsi Lambda Anda. Ini adalah cara yang jauh lebih efisien untuk melacak kondisi fungsi Lambda Anda, memungkinkan Anda mengetahui masalah di awal proses pengembangan. Misalnya, Anda dapat mengonfigurasi alarm berdasarkan durasi yang diharapkan dari pemanggilan fungsi Lambda Anda untuk mengatasi hambatan atau latensi yang disebabkan oleh kode fungsi Anda.

Memancarkan metrik kustom secara asinkron menggunakan Embedded Metric Format (EMF). Alih-alih melakukan panggilan API sinkron ke CloudWatch, gunakan EMF untuk memancarkan metrik melalui log fungsi Anda. Pendekatan ini mengurangi latensi dan meningkatkan kinerja.

Utilitas Metrik di Powertools untuk AWS Lambda menangani pemformatan EMF secara otomatis. Untuk informasi selengkapnya, lihat utilitas Python TypeScript, Java, at au.NET Metrics di Powertools untuk AWS Lambda dokumentasi. Untuk informasi tentang menggunakan EMF untuk menghasilkan log format metrik, lihat M enerbitkan log dengan format metrik tertanam di Panduan CloudWatch Pengguna Amazon.

Gunakan logging JSON terstruktur untuk pengamatan yang lebih baik. Logging terstruktur memudahkan pencarian, filter, dan analisis log fungsi Anda. Pertimbangkan untuk menggunakan utilitas Logger dari Powertools AWS Lambda untuk secara otomatis memformat log di JSON. Untuk informasi selengkapnya, lihat Python, Java TypeScript , atau .NET Logger utilitas di Powertools untuk AWS Lambda dokumentasi.

Gunakan pustaka logging dan AWS Lambda Metrik dan Dimensi untuk menangkap kesalahan aplikasi (seperti ERR, ERROR, dan PERINGATAN).

Gunakan Det AWS eksi Anomali Biaya untuk mendeteksi aktivitas yang tidak biasa di akun Anda. Deteksi Anomali Biaya menggunakan pembelajaran mesin untuk terus memantau biaya dan penggunaan Anda sambil meminimalkan peringatan positif palsu. Deteksi Anomali Biaya menggunakan data dari AWS Cost Explorer, yang memiliki penundaan hingga 24 jam.

Akibatnya, dibutuhkan waktu hingga 24 jam untuk mendeteksi anomali setelah penggunaan terjadi. Untuk memulai dengan Deteksi Anomali Biaya, Anda harus mendaftar terlebih dahulu untuk Cost Explorer. Kemudian, akses Deteksi Anomali Biaya.

Bekerja dengan stream

Uji dengan batch dan ukuran catatan berbeda sehingga frekuensi polling dari tiap sumber peristiwa disesuaikan dengan seberapa cepat fungsi Anda mampu menyelesaikan tugasnya. CreateEventSourceMapping BatchSize Parameter mengontrol jumlah maksimum rekaman yang dapat dikirim ke fungsi Anda dengan setiap pemanggilan. Ukuran batch yang lebih besar sering kali dapat menyerap overhead secara lebih efisien di serangkaian catatan yang lebih besar, sehingga meningkatkan throughput Anda.

Secara default, Lambda memanggil fungsi Anda segera setelah catatan tersedia. Jika batch yang dibaca Lambda dari sumber peristiwa hanya memiliki satu catatan di dalamnya, Lambda hanya mengirimkan satu catatan ke fungsi. Untuk menghindari pemanggilan fungsi dengan sejumlah kecil catatan, Anda dapat memberi tahu sumber peristiwa untuk menyangga catatan hingga 5 menit dengan mengonfigurasi jendela batching. Sebelum menjalankan fungsi, Lambda terus membaca catatan dari sumber peristiwa hingga mengumpulkan batch penuh, jendela batching berakhir, atau batch mencapai batas muatan 6 MB. Untuk informasi selengkapnya, lihat Perilaku batching.

Awas

Pemetaan sumber peristiwa lambda memproses setiap peristiwa setidaknya sekali, dan pemrosesan rekaman duplikat dapat terjadi. Untuk menghindari potensi masalah terkait peristiwa duplikat, kami sangat menyarankan agar Anda membuat kode fungsi Anda idempotent. Untuk mempelajari lebih lanjut, lihat Bagaimana cara membuat fungsi Lambda saya idempoten di Pusat Pengetahuan. AWS

Aktifkan respons batch parsional untuk pemrosesan aliran. Saat memproses kumpulan catatan dari aliran seperti Kinesis atau DynamoDB Streams, aktifkan respons batch parsional untuk memungkinkan Lambda mencoba lagi hanya catatan yang gagal, bukan seluruh batch. Ini meningkatkan efisiensi pemrosesan dan mengurangi pemrosesan ulang yang tidak perlu. Anda dapat secara opsional menggunakan utilitas Batch dari Powertools AWS Lambda untuk menyederhanakan pola pemrosesan batch.

catatan

Anda dapat menggunakan Powertools AWS Lambda untuk pemrosesan batch. Untuk informasi selengkapnya, lihat:

Tingkatkan throughput pemrosesan aliran Kinesis dengan menambahkan pecahan. Stream Kinesis terdiri dari satu atau lebih shard. Tingkat di mana Lambda dapat membaca data dari Kinesis berskala linier dengan jumlah pecahan.

Meningkatkan jumlah pecahan secara langsung meningkatkan jumlah pemanggilan fungsi Lambda bersamaan maksimum dan dapat meningkatkan throughput pemrosesan aliran Kinesis Anda. Untuk informasi lebih lanjut tentang hubungan antara pecahan dan pemanggilan fungsi, lihat. Aliran pemungutan suara dan batching Jika Anda meningkatkan jumlah serpihan dalam pengaliran Kinesis, pastikan Anda sudah memilih kunci partisi yang baik (lihat Kunci Partisi) untuk data Anda, sehingga catatan terkait berakhir pada serpihan yang sama dan data Anda terdistribusi dengan baik.

Gunakan Amazon CloudWatch on IteratorAge untuk menentukan apakah streaming Kinesis Anda sedang diproses. Misalnya, konfigurasikan CloudWatch alarm dengan pengaturan maksimum hingga 30000 (30 detik).

Praktik terbaik keamanan

Pantau penggunaan AWS Lambda Anda terkait dengan praktik terbaik keamanan dengan menggunakan AWS Security Hub CSPM. Security Hub CSPM menggunakan kontrol keamanan untuk mengevaluasi konfigurasi sumber daya dan standar keamanan untuk membantu Anda mematuhi berbagai kerangka kerja kepatuhan. Untuk informasi selengkapnya tentang menggunakan Security Hub CSPM untuk mengevaluasi sumber daya Lambda, lihat AWS Lambda kontrol di Panduan Pengguna. AWS Security Hub CSPM

Pantau log aktivitas jaringan Lambda menggunakan Amazon GuardDuty Lambda Protection. GuardDuty Perlindungan Lambda membantu Anda mengidentifikasi potensi ancaman keamanan saat fungsi Lambda dipanggil di Anda. Akun AWS Misalnya, jika salah satu fungsi Anda menanyakan alamat IP yang terkait dengan aktivitas terkait mata uang kripto. GuardDuty memantau log aktivitas jaringan yang dihasilkan ketika fungsi Lambda dipanggil. Untuk mempelajari lebih lanjut, lihat perlindungan Lambda di Panduan GuardDuty Pengguna Amazon.