

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 Acara
<a name="best-practices"></a>

Berikut adalah praktik terbaik yang direkomendasikan untuk menggunakan AWS Lambda:

**Topics**
+ [Kode Fungsi Acara](#function-code)
+ [Konfigurasi Fungsi Acara](#function-configuration)
+ [Skalabilitas Fungsi Acara](#function-scalability)
+ [Metrik dan alarm](#alarming-metrics)
+ [Bekerja dengan stream](#stream-events)
+ [Praktik terbaik keamanan](#security-best-practices)

## Kode Fungsi Acara
<a name="function-code"></a>

**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 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 in Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html).

**Gunakan [variabel lingkungan](configuration-envvars.md) 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 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](https://docs.aws.amazon.com/lambda/latest/api/welcome.html) untuk daftar API yang tersedia 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?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/) .

**catatan**  
Anda dapat menggunakan Powertools AWS Lambda untuk membuat fungsi idempoten. Untuk informasi lebih lanjut, lihat:  
[Python - utilitas Idempotency](https://docs.aws.amazon.com/powertools/python/latest/utilities/idempotency/)
[TypeScript - Utilitas idempotensi](https://docs.aws.amazon.com/powertools/typescript/latest/features/idempotency/)
[Java - utilitas Idempotency](https://docs.aws.amazon.com/powertools/java/latest/utilities/idempotency/)
[.NET - Idempotency utilitas](https://docs.aws.amazon.com/powertools/dotnet/utilities/idempotency/)

Untuk praktik terbaik kode khusus bahasa, lihat bagian berikut:
+ [Praktik terbaik kode untuk Fungsi Node.js Acara Lambda](nodejs-handler.md#nodejs-best-practices)
+ [Praktik terbaik kode untuk Fungsi TypeScript Acara Lambda](typescript-handler.md#typescript-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara Lambda Python](python-handler.md#python-handler-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara Ruby Lambda](ruby-handler.md#ruby-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara Java Lambda](java-handler.md#java-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara Go Lambda](golang-handler.md#go-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara C\# Lambda](csharp-handler.md#csharp-best-practices)
+ [Praktik terbaik kode untuk Fungsi Acara Lambda Rust](rust-handler.md#rust-best-practices)

## Konfigurasi Fungsi Acara
<a name="function-configuration"></a>

**Pengujian kinerja Fungsi Peristiwa Lambda Anda** adalah 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 pemanggilan dan dapat dilihat di Amazon. CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatchLogs.html) Pada setiap pemanggilan, `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 open source. Untuk informasi selengkapnya, lihat [AWS Lambda Power Tuning aktif](https://github.com/alexcasalboni/aws-lambda-power-tuning). 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](https://aws.amazon.com/blogs/compute/creating-faster-aws-lambda-functions-with-avx2/).

**Uji beban Fungsi Peristiwa Lambda Anda** untuk menentukan nilai batas waktu optimal. Penting untuk menganalisis berapa lama fungsi Anda berjalan sehingga Anda dapat menentukan masalah dengan layanan ketergantungan dengan lebih baik yang mungkin meningkatkan konkurensi fungsi di luar apa yang Anda harapkan. Ini sangat penting ketika Fungsi Peristiwa 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](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/).

**Gunakan izin yang paling membatasi saat menyetel kebijakan IAM.** Pahami sumber daya dan operasi yang dibutuhkan Fungsi Peristiwa Lambda Anda, dan batasi peran eksekusi untuk izin ini. Untuk informasi selengkapnya, lihat [Mengelola izin di AWS Lambda](lambda-permissions.md). 

**Jadilah akrab dengan[Kuota Lambda](gettingstarted-limits.md).** Ukuran muatan, deskriptor file, dan ruang /tmp sering diabaikan saat menentukan batas sumber daya runtime. 

**Hapus Fungsi Acara 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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) di antrean. Ini berlaku baik untuk [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) dan [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html).
+ Dalam kasus **CreateFunction**, AWS Lambda gagal proses pembuatan fungsi.
+ Dalam hal **UpdateFunctionConfiguration**, ini dapat menyebabkan invokasi ganda dari fungsi.

## Skalabilitas Fungsi Acara
<a name="function-scalability"></a>

**Biasakan diri dengan kendala throughput hulu dan hilir Anda.** Sementara Lambda Event Functions menskalakan secara 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](configuration-concurrency.md) 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](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/)** 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.](provisioned-concurrency.md)** 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
<a name="alarming-metrics"></a>

**Gunakan [Menggunakan CloudWatch metrik dengan Lambda](monitoring-metrics.md) dan [ CloudWatch Alarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)** alih-alih membuat atau memperbarui metrik dari dalam kode Fungsi Peristiwa Lambda Anda. Ini adalah cara yang jauh lebih efisien untuk melacak kesehatan Fungsi Acara Lambda Anda, memungkinkan Anda untuk menangkap masalah di awal proses pengembangan. Misalnya, Anda dapat mengonfigurasi alarm berdasarkan durasi yang diharapkan dari pemanggilan Fungsi Peristiwa Lambda Anda untuk mengatasi kemacetan atau latensi apa pun yang disebabkan oleh kode fungsi Anda.

**Memancarkan metrik kustom secara asinkron menggunakan Embedded Metric Format (EMF).** Alih-alih melakukan panggilan API sinkron 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 [Python](https://docs.aws.amazon.com/powertools/python/latest/core/metrics/), [Java [TypeScript](https://docs.aws.amazon.com/powertools/typescript/latest/features/metrics/)](https://docs.aws.amazon.com/powertools/java/latest/core/metrics/), atau utilitas Metrik [.NET](https://docs.aws.amazon.com/powertools/dotnet/core/metrics/) di Powertools untuk dokumentasi. AWS Lambda Untuk informasi tentang penggunaan EMF untuk menghasilkan log format metrik, lihat [Menerbitkan log dengan format metrik yang disematkan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation.html) di Panduan CloudWatch Pengguna Amazon.

**Gunakan logging JSON terstruktur untuk observabilitas yang lebih baik.** Pencatatan terstruktur memudahkan pencarian, filter, dan analisis log fungsi Anda. Pertimbangkan untuk menggunakan utilitas Logger dari Powertools AWS Lambda untuk memformat log secara otomatis di JSON. Untuk informasi selengkapnya, lihat [Python](https://docs.aws.amazon.com/powertools/python/latest/core/logger/), [Java [TypeScript](https://docs.aws.amazon.com/powertools/typescript/latest/features/logger/)](https://docs.aws.amazon.com/powertools/java/latest/core/logging/), atau utilitas [.NET](https://docs.aws.amazon.com/powertools/dotnet/core/logging/) Logger di Powertools untuk dokumentasi. AWS Lambda 

**Gunakan library logging dan [AWS Lambda Metrics and Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html)** untuk menangkap error aplikasi (seperti ERR, ERROR, dan WARNING). 

**Gunakan Deteksi [Anomali AWS Biaya untuk mendeteksi](https://docs.aws.amazon.com/cost-management/latest/userguide/manage-ad.html)** 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](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html). Kemudian, [akses Deteksi Anomali Biaya](https://docs.aws.amazon.com/cost-management/latest/userguide/settingup-ad.html#access-ad).

## Bekerja dengan stream
<a name="stream-events"></a>

**Uji dengan batch dan ukuran catatan berbeda **sehingga frekuensi polling dari tiap sumber peristiwa disesuaikan dengan seberapa cepat fungsi Anda mampu menyelesaikan tugasnya. [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) 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](invocation-eventsourcemapping.md#invocation-eventsourcemapping-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](https://repost.aws/knowledge-center/lambda-function-idempotent) di Pusat Pengetahuan. AWS 

**Aktifkan respons batch sebagian untuk pemrosesan aliran.** Saat memproses kumpulan rekaman dari aliran seperti Kinesis atau DynamoDB Streams, aktifkan respons batch paral 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 lebih lanjut, lihat:  
[Python - Pemrosesan Batch](https://docs.aws.amazon.com/powertools/python/latest/utilities/batch/)
[TypeScript - Pemrosesan Batch](https://docs.aws.amazon.com/powertools/typescript/latest/features/batch/)
[Java - Pemrosesan Batch](https://docs.aws.amazon.com/powertools/java/latest/utilities/batch/)
[.NET - Pemrosesan Batch](https://docs.aws.amazon.com/powertools/dotnet/utilities/batch-processing/)

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

Meningkatkan jumlah pecahan secara langsung meningkatkan jumlah pemanggilan Fungsi Peristiwa Lambda bersamaan maksimum dan dapat meningkatkan throughput pemrosesan aliran Kinesis Anda. Untuk informasi selengkapnya tentang hubungan antara pecahan dan pemanggilan fungsi, lihat. [Polling dan batching stream](with-kinesis.md#kinesis-polling-and-batching) Jika Anda meningkatkan jumlah serpihan dalam pengaliran Kinesis, pastikan Anda sudah memilih kunci partisi yang baik (lihat [Kunci Partisi](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#partition-key)) untuk data Anda, sehingga catatan terkait berakhir pada serpihan yang sama dan data Anda terdistribusi dengan baik. 

**Gunakan [ CloudWatchAmazon](https://docs.aws.amazon.com/streams/latest/dev/monitoring-with-cloudwatch.html)** IteratorAge untuk menentukan apakah aliran Kinesis Anda sedang diproses. Misalnya, konfigurasikan CloudWatch alarm dengan pengaturan maksimum hingga 30000 (30 detik).

## Praktik terbaik keamanan
<a name="security-best-practices"></a>

**Pantau penggunaan Anda AWS Lambda karena berkaitan 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 penggunaan CSPM Security Hub untuk mengevaluasi sumber daya Lambda, lihat [AWS Lambda kontrol di Panduan Pengguna](https://docs.aws.amazon.com/securityhub/latest/userguide/lambda-controls.html). AWS Security Hub CSPM 

**Pantau log aktivitas jaringan Lambda menggunakan Amazon Lambda GuardDuty Protection.** GuardDuty Perlindungan Lambda membantu Anda mengidentifikasi potensi ancaman keamanan saat Fungsi Peristiwa Lambda dipanggil di aplikasi 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 Peristiwa Lambda dipanggil. Untuk mempelajari selengkapnya, lihat [Perlindungan Lambda](https://docs.aws.amazon.com/guardduty/latest/ug/lambda-protection.html) di * GuardDuty Panduan Pengguna Amazon*.