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 SDK klien dan koneksi database di luar fungsi handler, dan cache 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 arahan 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 Kembali Koneksi dengan Keep-Alive di 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 konkurensi fungsi cadangan untuk 0 segera membatasi semua pemanggilan ke fungsi, saat Anda memperbarui kode.

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

  • Tulis kode idempoten. Menulis kode idempoten 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 selengkapnya, lihat Bagaimana cara membuat fungsi Lambda saya idempoten? .

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. Setiap peningkatan ukuran memori memicu peningkatan yang setara dalam CPU tersedia untuk fungsi Anda. Penggunaan memori untuk fungsi Anda ditentukan per pemanggilan dan dapat dilihat di Amazon. CloudWatch Dari setiap invokasi, entri REPORT: akan dibuat, sebagaimana 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 open source. Untuk informasi selengkapnya, lihat AWS Lambda Power Tuning aktif. GitHub

    Untuk mengoptimalkan kinerja fungsi, kami juga merekomendasikan penerapan pustaka yang dapat memanfaatkan Advanced Vector Extensions 2 ()AVX2. Ini memungkinkan Anda untuk 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 menentukan dengan lebih baik setiap masalah dengan layanan dependensi yang dapat meningkatkan konkurensi fungsi di luar yang Anda harapkan. Hal ini penting terutama ketika fungsi Lambda Anda melakukan panggilan jaringan ke sumber daya yang mungkin tidak menangani penskalaan Lambda.

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

  • Jadilah 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 CreateFunctiondan UpdateFunctionConfiguration.

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

    • Dalam kasus UpdateFunctionConfiguration, itu dapat menghasilkan duplikat pemanggilan fungsi.

Skalabilitas fungsi

  • Biasakan diri dengan 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 skala fungsi Anda, Anda dapat mengonfigurasi konkurensi cadangan pada fungsi Anda.

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

    • Gunakan batas waktu, percobaan ulang, dan backoff 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 konkurensi 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 menimbulkan biaya tambahan ke akun Anda. AWS

Metrik dan alarm

  • Gunakan Lihat metrik untuk fungsi 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 perkiraan durasi invokasi fungsi Lambda Anda untuk mengatasi hambatan atau keterlambatan yang terkait dengan kode fungsi Anda.

  • Manfaatkan library logging dan AWS Lambda Metrics and Dimensions untuk menangkap error aplikasi (mis.ERR,ERROR,WARNING, dll.)

  • Gunakan Deteksi Anomali AWS 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, diperlukan waktu hingga 24 jam untuk mendeteksi anomali setelah penggunaan terjadi. Untuk memulai dengan Deteksi Anomali Biaya, Anda harus terlebih dahulu mendaftar ke 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 catatan 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 tersebut. Untuk menghindari menjalankan fungsi dengan sejumlah kecil catatan, Anda dapat memberi tahu sumber acara untuk menyangga catatan hingga 5 menit dengan mengonfigurasi jendela batching. Sebelum menjalankan fungsi, Lambda terus membaca catatan dari sumber acara hingga mengumpulkan batch penuh, jendela batching kedaluwarsa, 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 duplikat catatan dapat terjadi. Untuk menghindari potensi masalah yang terkait dengan duplikat peristiwa, kami sangat menyarankan agar Anda membuat kode fungsi Anda idempoten. Untuk mempelajari lebih lanjut, lihat Bagaimana cara membuat fungsi Lambda saya idempoten di Pusat Pengetahuan. AWS

  • Tingkatkan throughput pemrosesan aliran Kinesis dengan menambahkan pecahan. Stream Kinesis terdiri dari satu atau lebih shard. Tingkat di mana Lambda dapat membaca data dari skala Kinesis secara linier dengan jumlah pecahan. Peningkatan jumlah shard akan secara langsung meningkatkan jumlah maksimal invokasi fungsi Lambda konkuren dan dapat meningkatkan throughput pemrosesan aliran Kinesis Anda. Untuk informasi selengkapnya tentang hubungan antara pecahan dan pemanggilan fungsi, lihat. Polling dan batching stream 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 CloudWatchAmazon IteratorAge untuk menentukan apakah aliran Kinesis Anda sedang diproses. Misalnya, konfigurasikan CloudWatch alarm dengan pengaturan maksimum hingga 30000 (30 detik).

Praktik terbaik keamanan

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

  • Pantau log aktivitas jaringan Lambda menggunakan Amazon Lambda GuardDuty Protection. GuardDuty Perlindungan Lambda membantu Anda mengidentifikasi potensi ancaman keamanan saat fungsi Lambda dipanggil di perangkat Anda. Akun AWS Misalnya, jika salah satu fungsi Anda menanyakan alamat IP yang terkait dengan aktivitas terkait cryptocurrency. GuardDuty memantau log aktivitas jaringan yang dihasilkan saat fungsi Lambda dipanggil. Untuk mempelajari selengkapnya, lihat Perlindungan Lambda di GuardDuty Panduan Pengguna Amazon.