

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

# Tentukan penangan fungsi Lambda di Node.js
<a name="nodejs-handler"></a>

*Handler* fungsi Lambda Anda adalah metode dalam kode fungsi Anda yang memproses peristiwa. Saat fungsi Anda diaktifkan, Lambda menjalankan metode handler. Fungsi Anda berjalan sampai handler mengembalikan respons, keluar, atau waktu habis.

Halaman ini menjelaskan cara bekerja dengan penangan fungsi Lambda di Node.js, termasuk opsi untuk penyiapan proyek, konvensi penamaan, dan praktik terbaik. Halaman ini juga menyertakan contoh fungsi Lambda Node.js yang mengambil informasi tentang pesanan, menghasilkan tanda terima file teks, dan menempatkan file ini di bucket Amazon Simple Storage Service (Amazon S3). Untuk informasi tentang cara menerapkan fungsi Anda setelah menulisnya, lihat [Deploy fungsi Lambda Node.js dengan arsip file .zip](nodejs-package.md) atau[Deploy fungsi Lambda Node.js dengan gambar kontainer](nodejs-image.md).

**Topics**
+ [

## Menyiapkan proyek penangan Node.js Anda
](#nodejs-handler-setup)
+ [

## Contoh kode fungsi Lambda Node.js
](#nodejs-example-code)
+ [

## Modul CommonJS dan ES
](#nodejs-commonjs-es-modules)
+ [

## Inisialisasi Node.js
](#nodejs-initialization)
+ [

## Konvensi penamaan handler
](#nodejs-handler-naming)
+ [

## Mendefinisikan dan mengakses objek peristiwa masukan
](#nodejs-example-input)
+ [

## Pola handler yang valid untuk fungsi Node.js
](#nodejs-handler-signatures)
+ [

## Menggunakan SDK untuk JavaScript v3 di handler Anda
](#nodejs-example-sdk-usage)
+ [

## Mengakses variabel lingkungan
](#nodejs-example-envvars)
+ [

## Menggunakan status global
](#nodejs-handler-state)
+ [

## Praktik terbaik kode untuk fungsi Lambda Node.js
](#nodejs-best-practices)

## Menyiapkan proyek penangan Node.js Anda
<a name="nodejs-handler-setup"></a>

Ada beberapa cara untuk menginisialisasi proyek Lambda Node.js. Misalnya, Anda dapat membuat proyek Node.js standar menggunakan`npm`, membuat [AWS SAM aplikasi](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/using-sam-cli-init.html#using-sam-cli-init-new), atau membuat [AWS CDK aplikasi](lambda-cdk-tutorial.md#lambda-cdk-step-1).

Untuk membuat proyek menggunakan`npm`:

```
npm init
```

Perintah ini menginisialisasi proyek Anda dan menghasilkan `package.json` file yang mengelola metadata dan dependensi proyek Anda.

Kode fungsi Anda tinggal di `.mjs` JavaScript file `.js` atau. Dalam contoh berikut, kami menamai file ini `index.mjs` karena menggunakan penangan modul ES. Lambda mendukung modul ES dan penangan CommonJS. Untuk informasi selengkapnya, lihat [Modul CommonJS dan ES](#nodejs-commonjs-es-modules).

Proyek fungsi Lambda Node.js yang khas mengikuti struktur umum ini:

```
/project-root
  ├── index.mjs — Contains main handler
  ├── package.json — Project metadata and dependencies
  ├── package-lock.json — Dependency lock file
  └── node_modules/ — Installed dependencies
```

## Contoh kode fungsi Lambda Node.js
<a name="nodejs-example-code"></a>

Contoh kode fungsi Lambda berikut mengambil informasi tentang pesanan, menghasilkan tanda terima file teks, dan menempatkan file ini di bucket Amazon S3.

**Example index.mjs fungsi Lambda**  

```
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';

// Initialize the S3 client outside the handler for reuse
const s3Client = new S3Client();

/**
 * Lambda handler for processing orders and storing receipts in S3.
 * @param {Object} event - Input event containing order details
 * @param {string} event.order_id - The unique identifier for the order
 * @param {number} event.amount - The order amount
 * @param {string} event.item - The item purchased
 * @returns {Promise<string>} Success message
 */
export const handler = async(event) => {
    try {
        // Access environment variables
        const bucketName = process.env.RECEIPT_BUCKET;
        if (!bucketName) {
            throw new Error('RECEIPT_BUCKET environment variable is not set');
        }

        // Create the receipt content and key destination
        const receiptContent = `OrderID: ${event.order_id}\nAmount: $${event.amount.toFixed(2)}\nItem: ${event.item}`;
        const key = `receipts/${event.order_id}.txt`;

        // Upload the receipt to S3
        await uploadReceiptToS3(bucketName, key, receiptContent);

        console.log(`Successfully processed order ${event.order_id} and stored receipt in S3 bucket ${bucketName}`);
        return 'Success';
    } catch (error) {
        console.error(`Failed to process order: ${error.message}`);
        throw error;
    }
};

/**
 * Helper function to upload receipt to S3
 * @param {string} bucketName - The S3 bucket name
 * @param {string} key - The S3 object key
 * @param {string} receiptContent - The content to upload
 * @returns {Promise<void>}
 */
async function uploadReceiptToS3(bucketName, key, receiptContent) {
    try {
        const command = new PutObjectCommand({
            Bucket: bucketName,
            Key: key,
            Body: receiptContent
        });

        await s3Client.send(command);
    } catch (error) {
        throw new Error(`Failed to upload receipt to S3: ${error.message}`);
    }
}
```

`index.mjs`File ini berisi bagian kode berikut:
+ `import`block: Gunakan blok ini untuk menyertakan pustaka yang dibutuhkan fungsi Lambda Anda, [AWS seperti](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/the-request-object.html) klien SDK.
+ `const s3Client`deklarasi: Ini menginisialisasi klien [Amazon S3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/) di luar fungsi handler. Hal ini menyebabkan Lambda menjalankan kode ini selama [fase inisialisasi](lambda-runtime-environment.md#runtimes-lifecycle-ib), dan klien dipertahankan untuk [digunakan kembali](lambda-runtime-environment.md#execution-environment-reuse) di beberapa pemanggilan.
+ JSDoc blok komentar: Tentukan jenis input dan output untuk handler Anda menggunakan [JSDoc anotasi](https://jsdoc.app/about-getting-started).
+ `export const handler`: Ini adalah fungsi handler utama yang dipanggil Lambda. Saat menerapkan fungsi Anda, tentukan properti `index.handler` [Handler](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-Handler). Nilai `Handler` properti adalah nama file dan nama metode handler yang diekspor, dipisahkan oleh sebuah titik.
+ `uploadReceiptToS3`fungsi: Ini adalah fungsi pembantu yang direferensikan oleh fungsi handler utama.

Agar fungsi ini berfungsi dengan baik, [peran pelaksanaannya](lambda-intro-execution-role.md) harus memungkinkan `s3:PutObject` tindakan. Juga, pastikan bahwa Anda mendefinisikan variabel `RECEIPT_BUCKET` lingkungan. Setelah pemanggilan berhasil, bucket Amazon S3 harus berisi file tanda terima.

## Modul CommonJS dan ES
<a name="nodejs-commonjs-es-modules"></a>

Node.js mendukung dua sistem modul: CommonJS dan ECMAScript modul (modul ES). [Lambda merekomendasikan penggunaan modul ES karena mendukung await tingkat atas, yang memungkinkan tugas asinkron diselesaikan selama inisialisasi lingkungan eksekusi.](#nodejs-initialization)

Node.js memperlakukan file dengan ekstensi nama `.cjs` file sebagai modul CommonJS sementara `.mjs` ekstensi menunjukkan modul ES. Secara default, Node.js memperlakukan file dengan ekstensi nama `.js` file sebagai modul CommonJS. Anda dapat mengkonfigurasi Node.js untuk memperlakukan `.js` file sebagai modul ES dengan menentukan `type` as `module` dalam `package.json` file fungsi. Anda dapat mengonfigurasi Node.js di Lambda untuk mendeteksi secara otomatis apakah `.js` file harus diperlakukan sebagai CommonJS atau sebagai modul ES dengan menambahkan `—experimental-detect-module` flag ke variabel lingkungan. `NODE_OPTIONS` Untuk informasi selengkapnya, lihat [Fitur Node.js Eksperimental](lambda-nodejs.md#nodejs-experimental-features).

Contoh berikut menunjukkan penangan fungsi yang ditulis menggunakan modul ES dan modul CommonJS. Contoh yang tersisa di halaman ini semuanya menggunakan modul ES.

------
#### [ ES module example ]

**Example - Penangan modul ES**  

```
const url = "https://aws.amazon.com/";

export const handler = async(event) => {
    try {
        const res = await fetch(url);
        console.info("status", res.status);
        return res.status;
    }
    catch (e) {
        console.error(e);
        return 500;
    }
};
```

------
#### [ CommonJS module example ]

**Example - Penangan modul CommonJS**  

```
const https = require("https");
let url = "https://aws.amazon.com/";

exports.handler = async function (event) {
  let statusCode;
  await new Promise(function (resolve, reject) {
    https.get(url, (res) => {
        statusCode = res.statusCode;
        resolve(statusCode);
      }).on("error", (e) => {
        reject(Error(e));
      });
  });
  console.log(statusCode);
  return statusCode;
};
```

------

## Inisialisasi Node.js
<a name="nodejs-initialization"></a>

Node.js menggunakan I/O model non-pemblokiran yang mendukung operasi asinkron yang efisien menggunakan loop peristiwa. Misalnya, jika Node.js membuat panggilan jaringan, fungsi terus memproses operasi lain tanpa memblokir respons jaringan. Ketika respon jaringan diterima, itu ditempatkan ke dalam antrean callback. Tugas dari antrian diproses ketika tugas saat ini selesai.

Lambda merekomendasikan penggunaan await tingkat atas sehingga tugas asinkron yang dimulai selama inisialisasi lingkungan eksekusi diselesaikan selama inisialisasi. Tugas asinkron yang tidak selesai selama inisialisasi biasanya akan berjalan selama pemanggilan fungsi pertama. Ini dapat menyebabkan perilaku atau kesalahan yang tidak terduga. Misalnya, inisialisasi fungsi Anda dapat membuat panggilan jaringan untuk mengambil parameter dari AWS Parameter Store. Jika tugas ini tidak selesai selama inisialisasi, nilainya mungkin null selama pemanggilan. Mungkin juga ada penundaan antara inisialisasi dan pemanggilan yang dapat memicu kesalahan dalam operasi yang sensitif terhadap waktu. Secara khusus, panggilan AWS layanan dapat mengandalkan tanda tangan permintaan yang sensitif terhadap waktu, yang mengakibatkan kegagalan panggilan layanan jika panggilan tidak selesai selama fase inisialisasi. Menyelesaikan tugas selama inisialisasi biasanya meningkatkan kinerja cold-start, dan pertama-tama memanggil kinerja saat menggunakan Provisioned Concurrency. Untuk informasi lebih lanjut, lihat posting blog kami [Menggunakan modul ES Node.js dan menunggu tingkat atas](https://aws.amazon.com/blogs/compute/using-node-js-es-modules-and-top-level-await-in-aws-lambda). AWS Lambda

## Konvensi penamaan handler
<a name="nodejs-handler-naming"></a>

Saat Anda mengonfigurasi fungsi, nilai pengaturan [Handler](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-Handler) adalah nama file dan nama metode handler yang diekspor, dipisahkan oleh titik. Default untuk fungsi yang dibuat di konsol dan untuk contoh dalam panduan ini adalah`index.handler`. Ini menunjukkan `handler` metode yang diekspor dari `index.mjs` file `index.js` atau.

Jika Anda membuat fungsi di konsol menggunakan nama file atau nama pengendali fungsi yang berbeda, Anda harus mengedit nama handler default.

**Untuk mengubah nama fungsi handler (konsol)**

1. Buka halaman [Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda dan pilih fungsi Anda.

1. Pilih tab **Kode**.

1. **Gulir ke bawah ke panel **pengaturan Runtime** dan pilih Edit.**

1. Di **Handler**, masukkan nama baru untuk handler fungsi Anda.

1. Pilih **Simpan**.

## Mendefinisikan dan mengakses objek peristiwa masukan
<a name="nodejs-example-input"></a>

JSON adalah format input yang paling umum dan standar untuk fungsi Lambda. Dalam contoh ini, fungsi mengharapkan input yang mirip dengan yang berikut:

```
{
    "order_id": "12345",
    "amount": 199.99,
    "item": "Wireless Headphones"
}
```

Saat bekerja dengan fungsi Lambda di Node.js, Anda dapat menentukan bentuk yang diharapkan dari peristiwa input menggunakan JSDoc anotasi. Dalam contoh ini, kita mendefinisikan struktur input dalam JSDoc komentar handler:

```
/**
 * Lambda handler for processing orders and storing receipts in S3.
 * @param {Object} event - Input event containing order details
 * @param {string} event.order_id - The unique identifier for the order
 * @param {number} event.amount - The order amount
 * @param {string} event.item - The item purchased
 * @returns {Promise<string>} Success message
 */
```

Setelah Anda menentukan jenis ini di JSDoc komentar Anda, Anda dapat mengakses bidang objek acara langsung dalam kode Anda. Misalnya, `event.order_id` mengambil nilai dari `order_id` dari input asli.

## Pola handler yang valid untuk fungsi Node.js
<a name="nodejs-handler-signatures"></a>

[Kami menyarankan Anda menggunakan [async/await](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/using-async-await.html) untuk mendeklarasikan fungsi handler alih-alih menggunakan callback.](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/using-a-callback-function.html) Async/await adalah cara ringkas dan mudah dibaca untuk menulis kode asinkron, tanpa perlu panggilan balik bersarang atau janji rantai. Dengan async/await, Anda dapat menulis kode yang berbunyi seperti kode sinkron, sambil tetap asinkron dan tidak memblokir.

### penangan fungsi async (disarankan)
<a name="nodejs-handler-async"></a>

`async`Kata kunci menandai fungsi sebagai asinkron, dan `await` kata kunci menjeda eksekusi fungsi sampai a diselesaikan. `Promise` Handler menerima argumen berikut:
+ `event`: Berisi data input yang diteruskan ke fungsi Anda.
+ `context`: Berisi informasi tentang pemanggilan, fungsi, dan lingkungan eksekusi. Untuk informasi selengkapnya, lihat [Menggunakan objek konteks Lambda untuk mengambil informasi fungsi Node.js](nodejs-context.md).

Berikut adalah tanda tangan yang valid untuk pola tersebut async/await :

```
export const handler = async (event) => { };
```

```
export const handler = async (event, context) => { };
```

### Penangan fungsi sinkron
<a name="nodejs-handler-synchronous"></a>

Jika fungsi Anda tidak melakukan tugas asinkron, Anda dapat menggunakan penangan fungsi sinkron, menggunakan salah satu tanda tangan fungsi berikut:

```
export const handler = (event) => { };
```

```
export const handler = (event, context) => { };
```

### Respon penangan fungsi streaming
<a name="nodejs-handler-response-streaming"></a>

Lambda mendukung streaming respons dengan Node.js. Response streaming function handler menggunakan `awslambda.streamifyResponse()` dekorator dan mengambil 3 parameter:`event`,`responseStream`, dan. `context` Tanda tangan fungsi adalah:

```
export const handler = awslambda.streamifyResponse(async (event, responseStream, context) => { });
```

Untuk informasi selengkapnya, lihat [Streaming respons untuk fungsi Lambda](configuration-response-streaming.md).

### Penangan fungsi berbasis panggilan balik
<a name="nodejs-handler-callback"></a>

**catatan**  
Penangan fungsi berbasis callback hanya didukung hingga Node.js 22. Mulai dari Node.js 24, tugas asinkron harus diimplementasikan menggunakan penangan fungsi asinkron.

Penangan fungsi berbasis callback harus menggunakan argumen event, konteks, dan callback. Contoh:

```
export const handler = (event, context, callback) => { };
```

Fungsi callback mengharapkan `Error` dan respons, yang harus JSON-serializable. Fungsi terus mengeksekusi sampai [loop peristiwa](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/) kosong atau fungsi habis waktu. Respons tidak dikirimkan ke invoker hingga semua tugas loop peristiwa selesai. Jika waktu fungsi habis, kesalahan akan dikembalikan. Anda dapat mengonfigurasi runtime untuk mengirim respons segera dengan menyetel [konteks. callbackWaitsForEmptyEventLoop](nodejs-context.md)untuk palsu.

**Example — Permintaan HTTP dengan callback**  
Fungsi contoh berikut memeriksa URL dan mengembalikan kode status kepada invoker.  

```
import https from "https";
let url = "https://aws.amazon.com/";

export const handler = (event, context, callback) => {
  https.get(url, (res) => {
    callback(null, res.statusCode);
  }).on("error", (e) => {
    callback(Error(e));
  });
};
```

## Menggunakan SDK untuk JavaScript v3 di handler Anda
<a name="nodejs-example-sdk-usage"></a>

Seringkali, Anda akan menggunakan fungsi Lambda untuk berinteraksi dengan atau membuat pembaruan ke sumber daya lain AWS . Cara termudah untuk berinteraksi dengan sumber daya ini adalah dengan menggunakan file AWS SDK untuk JavaScript. Semua [runtime Lambda Node.js yang didukung](lambda-nodejs.md#nodejs-supported-runtimes) menyertakan [SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/introduction/) untuk versi 3. JavaScript Namun, kami sangat menyarankan agar Anda menyertakan klien AWS SDK yang Anda butuhkan dalam paket penerapan Anda. Ini memaksimalkan [kompatibilitas mundur selama pembaruan runtime](runtimes-update.md#runtime-update-compatibility) Lambda di masa mendatang. Hanya mengandalkan SDK yang disediakan runtime jika Anda tidak dapat menyertakan paket tambahan (misalnya, saat menggunakan editor kode konsol Lambda atau kode sebaris dalam templat). AWS CloudFormation 

Untuk menambahkan dependensi SDK ke fungsi Anda, gunakan `npm install` perintah untuk klien SDK tertentu yang Anda butuhkan. Dalam kode contoh, kami menggunakan klien [Amazon S3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/). Tambahkan dependensi ini dengan menjalankan perintah berikut di direktori yang berisi `package.json` file Anda:

```
npm install @aws-sdk/client-s3
```

Dalam kode fungsi, impor klien dan perintah yang Anda butuhkan, seperti yang ditunjukkan oleh fungsi contoh:

```
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
```

Kemudian, inisialisasi klien [Amazon S3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/):

```
const s3Client = new S3Client();
```

Dalam contoh ini, kami menginisialisasi klien Amazon S3 kami di luar fungsi pengendali utama untuk menghindari keharusan menginisialisasi setiap kali kami menjalankan fungsi kami. Setelah menginisialisasi klien SDK, Anda dapat menggunakannya untuk melakukan panggilan API untuk layanan tersebut AWS . Kode contoh memanggil tindakan [PutObject](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/command/PutObjectCommand/)API Amazon S3 sebagai berikut:

```
const command = new PutObjectCommand({
    Bucket: bucketName,
    Key: key,
    Body: receiptContent
});
```

## Mengakses variabel lingkungan
<a name="nodejs-example-envvars"></a>

Dalam kode handler Anda, Anda dapat mereferensikan [variabel lingkungan](configuration-envvars.md) apa pun dengan menggunakan`process.env`. Dalam contoh ini, kami mereferensikan variabel `RECEIPT_BUCKET` lingkungan yang ditentukan menggunakan baris kode berikut:

```
// Access environment variables
const bucketName = process.env.RECEIPT_BUCKET;
if (!bucketName) {
    throw new Error('RECEIPT_BUCKET environment variable is not set');
}
```

## Menggunakan status global
<a name="nodejs-handler-state"></a>

Lambda menjalankan kode statis Anda selama [fase inisialisasi](lambda-runtime-environment.md#runtimes-lifecycle-ib) sebelum menjalankan fungsi Anda untuk pertama kalinya. Sumber daya yang dibuat selama inisialisasi tetap berada di memori di antara pemanggilan, sehingga Anda dapat menghindari keharusan membuatnya setiap kali Anda menjalankan fungsi Anda.

Dalam kode contoh, kode inisialisasi klien S3 berada di luar handler. Runtime menginisialisasi klien sebelum fungsi menangani peristiwa pertamanya, dan klien tetap tersedia untuk digunakan kembali di semua pemanggilan.

## Praktik terbaik kode untuk fungsi Lambda Node.js
<a name="nodejs-best-practices"></a>

Ikuti panduan ini saat membangun fungsi Lambda:
+ **Pisahkan handler Lambda dari logika inti Anda.** Ini memungkinkan Anda untuk membuat fungsi yang lebih dapat teruji.
+ **Kontrol dependensi dalam paket penerapan fungsi Anda.** Lingkungan AWS Lambda eksekusi berisi sejumlah pustaka. Untuk runtime Node.js dan Python, ini termasuk file. AWS SDKs Untuk mengaktifkan serangkaian fitur dan pembaruan keamanan terbaru, Lambda akan memperbarui pustaka ini secara berkala. Pembaruan ini dapat memberikan perubahan kecil pada perilaku fungsi Lambda Anda. Untuk memiliki kendali penuh atas dependensi yang digunakan fungsi Anda, kemas semua dependensi Anda dengan paket deployment Anda. 
+ **Minimalkan kompleksitas dependensi Anda.** Utamakan memilih kerangka kerja lebih sederhana yang cepat dimuat dalam memulai [lingkungan eksekusi](lambda-runtime-environment.md).
+ **Minimalkan ukuran paket penerapan Anda sesuai kebutuhan runtime-nya.** Ini akan mengurangi jumlah waktu yang dibutuhkan untuk mengunduh dan membongkar paket deployment Anda sebelum invokasi.

**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 di 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 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 Pembaruan API 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 [referensi API](https://docs.aws.amazon.com/lambda/latest/api/welcome.html) 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?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/) .