

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

# Memahami metode pemanggilan fungsi Lambda
<a name="lambda-invocation"></a>

Setelah Anda menerapkan fungsi Lambda Anda, Anda dapat memanggilnya dengan beberapa cara:
+ Konsol [Lambda — Gunakan konsol](testing-functions.md) Lambda untuk membuat acara pengujian dengan cepat untuk menjalankan fungsi Anda.
+ [AWS SDK](https://aws.amazon.com/developer/tools/) — Gunakan SDK untuk AWS menjalankan fungsi Anda secara terprogram.
+ API [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) — Gunakan Lambda Invoke API untuk langsung menjalankan fungsi Anda.
+ The [AWS Command Line Interface (AWS CLI)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) — Gunakan `aws lambda invoke` AWS CLI perintah untuk langsung memanggil fungsi Anda dari baris perintah.
+ Sebuah [fungsi URL HTTP (S) endpoint](urls-configuration.md) — Gunakan fungsi URLs untuk membuat titik akhir HTTP (S) khusus yang dapat Anda gunakan untuk memanggil fungsi Anda.

Semua metode ini adalah cara *langsung* untuk menjalankan fungsi Anda. Di Lambda, kasus penggunaan umum adalah memanggil fungsi Anda berdasarkan peristiwa yang terjadi di tempat lain dalam aplikasi Anda. Beberapa layanan dapat memanggil fungsi Lambda dengan setiap acara baru. Ini disebut [pemicu](lambda-services.md). Untuk layanan berbasis streaming dan antrian, Lambda memanggil fungsi dengan kumpulan catatan. Ini disebut [pemetaan sumber peristiwa](invocation-eventsourcemapping.md).

Saat Anda mengaktifkan suatu fungsi, Anda dapat memilih untuk mengaktifkannya secara sinkron atau asinkron. Dengan [invokasi sinkron](invocation-sync.md), Anda menunggu fungsi untuk memproses peristiwa dan mengirimkan respons. Dengan invokasi [asinkron](invocation-async.md), Lambda membuat antrean peristiwa untuk memproses dan mengembalikan respons dengan segera. [Parameter `InvocationType` permintaan di API Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#API_Invoke_RequestParameters) menentukan cara Lambda memanggil fungsi Anda. Nilai `RequestResponse` menunjukkan pemanggilan sinkron, dan nilai `Event` menunjukkan pemanggilan asinkron.

Untuk menjalankan fungsi Anda IPv6, gunakan titik akhir tumpukan [ganda](https://docs.aws.amazon.com/general/latest/gr/rande.html#dual-stack-endpoints) publik Lambda. Titik akhir dual-stack mendukung keduanya dan. IPv4 IPv6 Titik akhir dual-stack Lambda menggunakan sintaks berikut:

```
protocol://lambda.us-east-1.api.aws
```

Anda juga dapat menggunakan fungsi [Lambda URLs untuk memanggil fungsi](urls-configuration.md). IPv6 Fungsi titik akhir URL memiliki format berikut:

```
https://url-id.lambda-url.us-east-1.on.aws
```

Jika pemanggilan fungsi menghasilkan kesalahan, untuk pemanggilan sinkron, lihat pesan kesalahan dalam respons dan coba lagi pemanggilan secara manual. [Untuk pemanggilan asinkron, Lambda menangani percobaan ulang secara otomatis dan dapat mengirim catatan pemanggilan ke tujuan.](invocation-async-retain-records.md#invocation-async-destinations)

# Memanggil fungsi Lambda secara sinkron
<a name="invocation-sync"></a>

Saat Anda memanggil fungsi secara sinkron, Lambda menjalankan fungsi dan menunggu suatu respons. Ketika fungsi selesai, Lambda mengembalikan respons dari kode fungsi dengan data tambahan, seperti versi fungsi yang diaktifkan. Untuk menjalankan fungsi secara sinkron dengan AWS CLI, gunakan perintah. `invoke`

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload '{ "key": "value" }' response.json
```

**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.

Anda akan melihat output berikut:

```
{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}
```

Diagram berikut menunjukkan klien yang memanggil fungsi Lambda secara sinkron. Lambda mengirimkan peristiwa tersebut secara langsung ke fungsi dan mengirimkan respons fungsi kembali ke invoker.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/invocation-sync.png)


`payload` adalah string yang berisi peristiwa dalam format JSON. Nama file tempat AWS CLI menulis respons dari fungsi adalah `response.json`. Jika fungsi mengembalikan objek atau kesalahan, badan respon adalah objek atau kesalahan dalam format JSON. Jika fungsi keluar tanpa kesalahan, badan responsnya adalah`null`.

**catatan**  
Lambda tidak menunggu ekstensi eksternal selesai sebelum mengirim respons. Ekstensi eksternal berjalan sebagai proses independen di lingkungan eksekusi dan terus berjalan setelah pemanggilan fungsi selesai. Untuk informasi selengkapnya, lihat [Menambah fungsi Lambda menggunakan ekstensi Lambda](lambda-extensions.md).

Output dari perintah, yang ditampilkan di terminal, mencakup informasi dari header di respons dari Lambda. Ini termasuk versi yang memproses peristiwa (berguna saat Anda menggunakan [alias](configuration-aliases.md)), dan kode status yang dikembalikan oleh Lambda. Jika Lambda dapat menjalankan fungsi, kode statusnya adalah 200, meskipun fungsi tersebut mengembalikan kesalahan.

**catatan**  
Untuk fungsi dengan waktu habis yang lama, klien Anda mungkin terputus selama invokasi sinkron sementara menunggu respons. Konfigurasikan klien HTTP, SDK, firewall, proksi, atau sistem operasi Anda untuk memungkinkan koneksi panjang dengan waktu habis atau pengaturan tetap aktif.

Jika Lambda tidak dapat menjalankan fungsi, kesalahan ditampilkan di output.

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload value response.json
```

Anda akan melihat output berikut:

```
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"value"; line: 1, column: 11]
```

 AWS CLI Ini adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Anda dapat menggunakan [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) untuk mengambil log untuk invokasi menggunakan opsi perintah `--log-type`. Respons berisi bidang `LogResult` yang memuat hingga 4 KB log berkode base64 dari invokasi.

**Example mengambil ID log**  
Contoh berikut menunjukkan cara mengambil *ID log* dari `LogResult` untuk fungsi bernama `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
Anda akan melihat output berikut:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example mendekode log**  
Pada prompt perintah yang sama, gunakan utilitas `base64` untuk mendekodekan log. Contoh berikut menunjukkan cara mengambil log berkode base64 untuk `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.  
Anda akan melihat output berikut:  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
Utilitas `base64` tersedia di Linux, macOS, dan [Ubuntu pada Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Pengguna macOS mungkin harus menggunakan `base64 -D`.

Untuk informasi selengkapnya tentang API `Invoke`, termasuk daftar lengkap parameter, header, dan kesalahan, lihat [Panggil](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html).

Saat Anda memanggil fungsi secara langsung, Anda dapat memeriksa respons kesalahan dan mencoba lagi. AWS SDK AWS CLI dan juga secara otomatis mencoba lagi pada batas waktu klien, pelambatan, dan kesalahan layanan. Untuk informasi selengkapnya, lihat [Memahami perilaku coba lagi di Lambda](invocation-retries.md).

# Memanggil fungsi Lambda secara asinkron
<a name="invocation-async"></a>

Beberapa Layanan AWS, seperti Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) dan Amazon Simple Notification Service (Amazon SNS), menjalankan fungsi secara asinkron untuk memproses peristiwa. Anda juga dapat menjalankan fungsi Lambda secara asinkron menggunakan AWS CLI() atau salah AWS Command Line Interface satu fungsi. AWS SDKs Saat Anda memanggil fungsi secara asinkron, Anda tidak perlu menunggu respons dari kode fungsi tersebut. Anda menyerahkan peristiwa ke Lambda dan Lambda menangani sisanya. Anda dapat mengonfigurasi cara Lambda menangani kesalahan, dan dapat mengirim catatan pemanggilan ke sumber daya hilir seperti Amazon Simple Queue Service (Amazon SQS) atau Amazon EventBridge () untuk menyatukan komponen aplikasi Anda. EventBridge

Diagram berikut menunjukkan klien yang mengaktifkan fungsi Lambda secara asinkron. Lambda membuat antrean peristiwa sebelum mengirimkannya ke fungsi.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/features-async.png)


Untuk invokasi asinkron, Lambda menempatkan peristiwa dalam antrean dan mengembalikan respons sukses informasi tambahan. Proses terpisah membaca peristiwa dari antrean dan mengirimnya ke fungsi Anda.

 Untuk menjalankan fungsi Lambda secara asinkron menggunakan AWS Command Line Interface AWS CLI() atau salah satu fungsi, setel parameter AWS SDKs ke. [InvocationType](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#lambda-Invoke-request-InvocationType)`Event` Contoh berikut menunjukkan AWS CLI perintah untuk memanggil fungsi.

```
aws lambda invoke \
  --function-name my-function  \
  --invocation-type Event \
  --cli-binary-format raw-in-base64-out \
  --payload '{ "key": "value" }' response.json
```

Anda akan melihat output berikut:

```
{
    "StatusCode": 202
}
```

**cli-binary-format**Opsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) di *Panduan AWS Command Line Interface Pengguna untuk Versi 2*.

File output (`response.json`) tidak berisi informasi apa pun, tetapi masih dibuat saat Anda menjalankan perintah ini. Jika Lambda tidak dapat menambahkan peristiwa ke antrean, pesan kesalahan akan muncul di output perintah.

# Bagaimana Lambda menangani kesalahan dan mencoba ulang dengan pemanggilan asinkron
<a name="invocation-async-error-handling"></a>

Lambda mengelola antrian peristiwa asinkron fungsi Anda dan mencoba lagi kesalahan. Jika fungsi mengembalikan kesalahan, secara default Lambda mencoba menjalankannya dua kali lagi, dengan menunggu satu menit antara dua upaya pertama, dan dua menit antara upaya kedua dan ketiga. Kesalahan fungsi meliputi kesalahan yang dikembalikan oleh kode fungsi dan kesalahan yang dikembalikan oleh runtime fungsi, seperti waktu habis.

Apabila fungsi tidak memiliki ketersediaan konkurensi yang cukup untuk memproses semua peristiwa, permintaan tambahan akan diperlambat. Untuk kesalahan pelambatan (429) dan kesalahan sistem (seri 500), Lambda mengembalikan acara ke antrian dan mencoba menjalankan fungsi lagi hingga 6 jam secara default. Interval percobaan lagi meningkat secara eksponensial dari 1 detik setelah percobaan pertama hingga maksimum 5 menit. Jika antrian berisi banyak entri, Lambda meningkatkan interval coba lagi dan mengurangi tingkat di mana ia membaca peristiwa dari antrian.

Meskipun fungsi Anda tidak memunculkan kesalahan, fungsi dapat menerima peristiwa yang sama dari Lambda beberapa kali karena antrean itu sendiri pada akhirnya konsisten. Jika fungsi tidak dapat mengikuti peristiwa masuk, peristiwa juga dapat dihapus dari antrean tanpa dikirim ke fungsi. Pastikan bahwa kode fungsi Anda secara rapi menangani duplikasi peristiwa, dan bahwa Anda memiliki cukup konkurensi tersedia untuk menangani semua invokasi.

Ketika antrean sangat panjang, acara baru mungkin menua sebelum Lambda memiliki kesempatan untuk mengirimnya ke fungsi Anda. Saat peristiwa kedaluwarsa atau gagal dalam semua upaya pemrosesan, Lambda menghapusnya. Anda dapat [mengonfigurasi penanganan kesalahan](invocation-async-configuring.md) untuk fungsi mengurangi jumlah percobaan ulang yang dilakukan Lambda, atau membuang kejadian yang tidak diproses dengan lebih cepat. Untuk menangkap peristiwa yang dibuang, [konfigurasikan antrian huruf mati untuk fungsi](invocation-async-retain-records.md#invocation-dlq) tersebut. Untuk menangkap catatan pemanggilan yang gagal (seperti batas waktu atau kesalahan runtime), [buat](invocation-async-retain-records.md#invocation-async-destinations) tujuan saat gagal. 

# Mengonfigurasi pengaturan penanganan kesalahan untuk pemanggilan asinkron Lambda
<a name="invocation-async-configuring"></a>

Gunakan pengaturan berikut untuk mengonfigurasi cara Lambda menangani kesalahan dan mencoba ulang untuk pemanggilan fungsi asinkron:
+ [MaximumEventAgeInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumEventAgeInSeconds): Jumlah waktu maksimum, dalam hitungan detik, Lambda menyimpan peristiwa dalam antrian acara asinkron sebelum membuangnya.
+ [MaximumRetryAttempts](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumRetryAttempts): Jumlah maksimum kali Lambda mencoba ulang peristiwa ketika fungsi mengembalikan kesalahan.

Gunakan konsol Lambda atau AWS CLI untuk mengonfigurasi pengaturan penanganan kesalahan pada fungsi, versi, atau alias.

------
#### [ Console ]

**Untuk mengonfigurasi penanganan kesalahan**

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

1. Pilih fungsi.

1. Pilih **Konfigurasi**, lalu pilih**Invokasi asinkron**.

1. Di bagian **Invokasi asinkron**, pilih **Edit**.

1. Konfigurasikan pengaturan berikut.
   + **Usia maksimum peristiwa** – Jumlah waktu maksimum yang dimiliki Lambda untuk menyimpan acara dalam antrean peristiwa asinkron, hingga 6 jam.
   + **Usaha percobaan ulang** – Jumlah pengulangan Lambda saat fungsi mengembalikan kesalahan, antara 0 dan 2.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

[Untuk mengonfigurasi pemanggilan asinkron dengan AWS CLI, gunakan perintah -config. put-function-event-invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/put-function-event-invoke-config.html) Contoh berikut mengonfigurasi fungsi dengan batas waktu peristiwa maksimum selama 1 jam dan tidak perlu percobaan ulang.

```
aws lambda put-function-event-invoke-config \ 
  --function-name error \
  --maximum-event-age-in-seconds 3600 \
  --maximum-retry-attempts 0
```

Perintah `put-function-event-invoke-config` menimpa konfigurasi fungsi, versi, atau alias yang ada. Untuk mengonfigurasi opsi tanpa mengatur ulang yang lain, gunakan [update-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html). Contoh berikut mengonfigurasi Lambda untuk mengirim catatan ke antrian SQS standar `destination` bernama saat peristiwa tidak dapat diproses.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

Anda akan melihat output berikut:

```
{
    "LastModified": 1573686021.479,
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
    "MaximumRetryAttempts": 0,
    "MaximumEventAgeInSeconds": 3600,
    "DestinationConfig": {
        "OnSuccess": {},
        "OnFailure": {}
    }
}
```

Ketika peristiwa invokasi melebihi waktu maksimum atau gagal dalam semua upaya percobaan ulang, Lambda menghapusnya. [Untuk menyimpan salinan peristiwa yang dibuang, konfigurasikan tujuan acara yang gagal.](invocation-async-retain-records.md#invocation-async-destinations)

# Menangkap catatan pemanggilan asinkron Lambda
<a name="invocation-async-retain-records"></a>

Lambda dapat mengirim catatan pemanggilan asinkron ke salah satu dari berikut ini. Layanan AWS
+ **Amazon SQS - Antrian SQS** standar
+ **Amazon SNS - Topik SNS** standar
+ **Amazon S3** - Bucket Amazon S3 (hanya gagal)
+ **AWS Lambda**- Fungsi Lambda
+ **Amazon EventBridge** - Bus EventBridge acara

Catatan invokasi berisi detail tentang permintaan dan respons dalam format JSON. Anda dapat mengonfigurasi tujuan terpisah untuk acara yang berhasil diproses, dan acara yang gagal dalam semua upaya pemrosesan. Atau, Anda dapat mengonfigurasi antrian Amazon SQS standar atau topik Amazon SNS standar sebagai antrian huruf mati untuk peristiwa yang dibuang. Untuk antrean dead-letter, Lambda hanya mengirimkan konten acara, tanpa perincian tentang responsnya.

Jika Lambda tidak dapat mengirim catatan ke tujuan yang telah Anda konfigurasikan, Lambda akan mengirimkan `DestinationDeliveryFailures` metrik ke Amazon. CloudWatch Hal ini dapat terjadi jika konfigurasi Anda menyertakan jenis tujuan yang tidak didukung, seperti antrean Amazon SQS FIFO atau topik Amazon SNS FIFO. Kesalahan pengiriman juga dapat terjadi karena kesalahan izin dan batas ukuran. Untuk informasi selengkapnya tentang metrik pemanggilan Lambda, lihat. [Metrik invokasi](monitoring-metrics-types.md#invocation-metrics)

**catatan**  
Untuk mencegah fungsi memicu, Anda dapat mengatur konkurensi cadangan fungsi ke nol. [Saat Anda menyetel konkurensi cadangan ke nol untuk fungsi yang dipanggil secara asinkron, Lambda mulai mengirim peristiwa baru ke antrian [huruf mati yang dikonfigurasi atau tujuan peristiwa yang](#invocation-dlq) gagal, tanpa mencoba lagi.](#invocation-async-destinations) Untuk memproses peristiwa yang dikirim saat konkurensi cadangan disetel ke nol, Anda harus menggunakan peristiwa dari antrian surat mati atau tujuan acara yang gagal.

## Menambahkan tujuan
<a name="invocation-async-destinations"></a>

Untuk menyimpan catatan pemanggilan asinkron, tambahkan tujuan ke fungsi Anda. Anda dapat memilih untuk mengirim pemanggilan yang berhasil atau gagal ke tujuan. Setiap fungsi dapat memiliki beberapa tujuan, sehingga Anda dapat mengonfigurasi tujuan terpisah untuk acara yang berhasil dan gagal. Setiap catatan yang dikirim ke tujuan adalah dokumen JSON dengan rincian tentang pemanggilan. Seperti pengaturan penanganan kesalahan, Anda dapat mengonfigurasi tujuan pada fungsi, versi fungsi, atau alias.

**Tip**  
Anda juga dapat menyimpan catatan pemanggilan yang gagal untuk jenis pemetaan sumber peristiwa berikut: [Amazon Kinesis, Amazon DynamoDB,](kinesis-on-failure-destination.md#kinesis-on-failure-destination-console) [dan Apache Kafka (Amazon MSK](services-dynamodb-errors.md) [dan Apache Kafka](kafka-on-failure.md#kafka-onfailure-destination) yang dikelola sendiri).<a name="destinations-permissions"></a>

Tabel berikut mencantumkan tujuan yang didukung untuk catatan pemanggilan asinkron. Agar Lambda berhasil mengirim catatan ke tujuan yang Anda pilih, pastikan [peran eksekusi](lambda-intro-execution-role.md) fungsi Anda juga berisi izin yang relevan. Tabel ini juga menjelaskan bagaimana setiap tipe tujuan menerima catatan pemanggilan JSON.


| Jenis tujuan | Izin yang diperlukan | Format JSON khusus tujuan | 
| --- | --- | --- | 
|  Antrean Amazon SQS  |  [persegi: SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)  |  Lambda melewati catatan doa sebagai ke tujuan. `Message`  | 
|  Topik Amazon SNS  |  [SNS: Publikasikan](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)  |  Lambda melewati catatan doa sebagai ke tujuan. `Message`  | 
|  Bucket Amazon S3 (hanya pada kegagalan)  |  [s3: PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) [s3: ListBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/invocation-async-retain-records.html)  | 
|  Fungsi Lambda  |  [lambda: InvokeFunction](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Lambda meneruskan catatan pemanggilan sebagai muatan ke fungsi.  | 
|  EventBridge  |  [peristiwa: PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/invocation-async-retain-records.html)  | 

**catatan**  
Untuk tujuan Amazon S3, jika Anda telah mengaktifkan enkripsi pada bucket menggunakan kunci KMS, fungsi Anda juga memerlukan izin [kms](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html):. GenerateDataKey

**penting**  
Saat menggunakan Amazon SNS sebagai tujuan, ketahuilah bahwa Amazon SNS memiliki batas ukuran pesan maksimum 256 KB. Jika payload pemanggilan asinkron Anda mendekati 1 MB, catatan pemanggilan (yang menyertakan muatan asli ditambah metadata tambahan) dapat melebihi batas Amazon SNS dan menyebabkan kegagalan pengiriman. Pertimbangkan untuk menggunakan tujuan Amazon SQS atau Amazon S3 untuk muatan yang lebih besar.

Langkah-langkah berikut menjelaskan cara mengonfigurasi tujuan untuk suatu fungsi menggunakan konsol Lambda dan. AWS CLI

------
#### [ Console ]

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

1. Pilih fungsi.

1. Di bagian **Gambaran umum fungsi**, pilih **Tambahkan tujuan**.

1. Untuk **Sumber**, pilih **Invokasi asinkron**.

1. Untuk **Kondisi**, pilih dari opsi berikut:
   + **Kegagalan** – Kirimkan catatan saat peristiwa gagal dalam semua upaya pemrosesan atau melebihi waktu maksimum.
   + **Sukses** – Kirimkan catatan saat fungsi berhasil memproses invokasi asinkron.

1. Untuk **Jenis tujuan**, pilih jenis sumber daya yang menerima catatan invokasi.

1. Untuk **Tujuan**, pilih sumber daya.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

Untuk mengkonfigurasi tujuan menggunakan AWS CLI, jalankan perintah [update-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html). Contoh berikut mengonfigurasi Lambda untuk mengirim catatan ke antrian SQS standar `destination` bernama saat peristiwa tidak dapat diproses.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

### Praktik terbaik keamanan untuk tujuan Amazon S3
<a name="s3-destination-security"></a>

Menghapus bucket S3 yang dikonfigurasi sebagai tujuan tanpa menghapus tujuan dari konfigurasi fungsi Anda dapat menimbulkan risiko keamanan. Jika pengguna lain mengetahui nama bucket tujuan Anda, mereka dapat membuat ulang bucket di bucket tersebut. Akun AWS Catatan pemanggilan yang gagal akan dikirim ke bucket mereka, yang berpotensi mengekspos data dari fungsi Anda.

**Awas**  
Untuk memastikan bahwa catatan pemanggilan dari fungsi Anda tidak dapat dikirim ke bucket S3 di bucket lain Akun AWS, tambahkan kondisi ke peran eksekusi fungsi Anda yang membatasi `s3:PutObject` izin ke bucket di akun Anda. 

Contoh berikut menunjukkan kebijakan IAM yang membatasi `s3:PutObject` izin fungsi Anda ke bucket di akun Anda. Kebijakan ini juga memberi Lambda `s3:ListBucket` izin yang dibutuhkan untuk menggunakan bucket S3 sebagai tujuan.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3BucketResourceAccountWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:::*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:ResourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

Untuk menambahkan kebijakan izin ke peran eksekusi fungsi Anda menggunakan Konsol Manajemen AWS atau AWS CLI, lihat instruksi dalam prosedur berikut:

------
#### [ Console ]

**Untuk menambahkan kebijakan izin ke peran eksekusi fungsi (konsol)**

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

1. Pilih fungsi Lambda yang peran eksekusinya ingin Anda modifikasi.

1. Di tab **Konfigurasi**, pilih **Izin**.

1. Di tab **Peran eksekusi**, pilih **nama Peran** fungsi Anda untuk membuka halaman konsol IAM peran.

1. Tambahkan kebijakan izin ke peran dengan melakukan hal berikut:

   1. Di panel **Kebijakan izin**, pilih **Tambahkan izin**, lalu pilih **Buat** kebijakan sebaris.

   1. Di **Editor kebijakan**, pilih **JSON**.

   1. Rekatkan kebijakan yang ingin Anda tambahkan ke editor (ganti JSON yang ada), lalu pilih **Berikutnya**.

   1. Di bawah **Detail kebijakan**, masukkan **nama Kebijakan**.

   1. Pilih **Buat kebijakan**.

------
#### [ AWS CLI ]

**Untuk menambahkan kebijakan izin ke peran eksekusi fungsi (CLI)**

1. Buat dokumen kebijakan JSON dengan izin yang diperlukan dan simpan di direktori lokal.

1. Gunakan perintah IAM `put-role-policy` CLI untuk menambahkan izin ke peran eksekusi fungsi Anda. Jalankan perintah berikut dari direktori tempat Anda menyimpan dokumen kebijakan JSON dan ganti nama peran, nama kebijakan, dan dokumen kebijakan dengan nilai Anda sendiri.

   ```
   aws iam put-role-policy \
   --role-name my_lambda_role \
   --policy-name LambdaS3DestinationPolicy \
   --policy-document file://my_policy.json
   ```

------

### Contoh catatan pemanggilan
<a name="destination-example-record"></a>

Ketika pemanggilan cocok dengan kondisi, Lambda mengirimkan [dokumen JSON](#destinations-permissions) dengan rincian tentang pemanggilan ke tujuan. Contoh berikut menunjukkan catatan invokasi untuk peristiwa yang gagal dalam tiga upaya pemrosesan karena kesalahan fungsi.

**Example**  

```
{
    "version": "1.0",
    "timestamp": "2019-11-14T18:16:05.568Z",
    "requestContext": {
        "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e",
        "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
        "condition": "RetriesExhausted",
        "approximateInvokeCount": 3
    },
    "requestPayload": {
        "ORDER_IDS": [
            "9e07af03-ce31-4ff3-xmpl-36dce652cb4f",
            "637de236-e7b2-464e-xmpl-baf57f86bb53",
            "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15"
        ]
    },
    "responseContext": {
        "statusCode": 200,
        "executedVersion": "$LATEST",
        "functionError": "Unhandled"
    },
    "responsePayload": {
        "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request"
    }
}
```

Catatan invokasi berisi perincian tentang peristiwa, respons, dan alasan mengapa catatan dikirim.

### Menelusuri permintaan ke tujuan
<a name="destinations-tracing"></a>

Anda dapat menggunakan AWS X-Ray untuk melihat tampilan terhubung dari setiap permintaan saat antrian, diproses oleh fungsi Lambda, dan diteruskan ke layanan tujuan. Saat Anda mengaktifkan penelusuran X-Ray untuk fungsi atau layanan yang memanggil fungsi, Lambda menambahkan header X-Ray ke permintaan dan meneruskan header ke layanan tujuan. Jejak dari layanan hulu secara otomatis ditautkan ke jejak dari fungsi Lambda hilir dan layanan tujuan, menciptakan end-to-end tampilan seluruh aplikasi. Untuk informasi lebih lanjut tentang penelusuran, lihat[Visualisasikan pemanggilan fungsi Lambda menggunakan AWS X-Ray](services-xray.md).

## Menambahkan antrian huruf mati
<a name="invocation-dlq"></a>

Sebagai alternatif untuk [tujuan kegagalan](#invocation-async-destinations), Anda dapat mengonfigurasi fungsi Anda dengan antrean dead-letter untuk menyimpan kejadian yang telah dihapus untuk pemrosesan lebih lanjut. Antrean dead-letter juga berfungsi sama seperti tujuan kegagalan dalam kondisi di mana ini digunakan saat suatu kejadian gagal dalam semua upaya pemrosesan atau kedaluwarsa tanpa diproses. Namun, Anda hanya dapat menambah atau menghapus antrian huruf mati di tingkat fungsi. Versi fungsi menggunakan pengaturan antrian huruf mati yang sama dengan versi yang tidak dipublikasikan (\$1LATEST). Tujuan kegagalan juga mendukung target tambahan dan mencakup perincian tentang respons fungsi dalam catatan invokasi.

Untuk memproses ulang peristiwa dalam antrian huruf mati, Anda dapat mengaturnya sebagai sumber [peristiwa untuk](invocation-eventsourcemapping.md) fungsi Lambda Anda. Atau, Anda dapat mengambil acara secara manual.

Anda dapat memilih antrian standar Amazon SQS atau topik standar Amazon SNS untuk antrian surat mati Anda. Antrian FIFO dan topik FIFO Amazon SNS tidak didukung.
+ [Antrean Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) – Antrean yang menahan kejadian yang gagal hingga terjadi. Pilih antrian standar Amazon SQS jika Anda mengharapkan satu entitas, seperti fungsi Lambda atau CloudWatch alarm, untuk memproses peristiwa yang gagal. Untuk informasi selengkapnya, lihat [Menggunakan Lambda dengan Amazon SQS](with-sqs.md).
+ [Topik Amazon SNS](https://docs.aws.amazon.com/sns/latest/gsg/CreateTopic.html) – Topik menyampaikan peristiwa yang gagal ke satu tujuan atau lebih. Pilih topik standar Amazon SNS jika Anda mengharapkan beberapa entitas bertindak atas peristiwa yang gagal. Misalnya, Anda dapat mengonfigurasi topik untuk mengirim peristiwa ke alamat email, fungsi Lambda, titik akhir and/or HTTP. Untuk informasi selengkapnya, lihat [Memanggil fungsi Lambda dengan notifikasi Amazon SNS](with-sns.md).

Untuk mengirim acara ke antrean atau topik, fungsi Anda memerlukan izin tambahan. Tambahkan kebijakan dengan [izin yang diperlukan](#destinations-permissions) ke [peran eksekusi](lambda-intro-execution-role.md) fungsi Anda. Jika antrian target atau topik dienkripsi dengan AWS KMS kunci yang dikelola pelanggan, pastikan peran eksekusi fungsi dan kebijakan [berbasis sumber daya kunci berisi izin](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) yang relevan.

Setelah membuat target dan memperbarui peran eksekusi fungsi Anda, tambahkan antrean dead-letter ke fungsi Anda. Anda dapat mengonfigurasi beberapa fungsi untuk mengirimkan peristiwa ke target yang sama.

------
#### [ Console ]

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

1. Pilih fungsi.

1. Pilih **Konfigurasi**, lalu pilih**Invokasi asinkron**.

1. Di bagian **Invokasi asinkron**, pilih **Edit**.

1. **Setel **layanan antrian Dead-letter** ke Amazon SQS **atau Amazon SNS**.**

1. Pilih antrean atau topik target.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

Untuk mengkonfigurasi antrian huruf mati dengan AWS CLI, gunakan perintah. [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html)

```
aws lambda update-function-configuration \
  --function-name my-function \
  --dead-letter-config TargetArn=arn:aws:sns:us-east-1:123456789012:my-topic
```

------

Lambda mengirimkan peristiwa ke antrean surat mati sebagaimana adanya, dengan informasi tambahan dalam atribut. Anda dapat menggunakan informasi ini untuk mengidentifikasi kesalahan yang dikembalikan fungsi, atau untuk menghubungkan peristiwa dengan log atau jejak AWS X-Ray .

**Atribut pesan antrean surat mati**
+ **RequestID** (String) – ID permintaan invokasi. Permintaan IDs muncul dalam log fungsi. Anda juga dapat menggunakan X-Ray SDK untuk mencatat ID permintaan pada atribut di jejak. Kemudian, Anda dapat mencari jejak berdasarkan ID permintaan di konsol X-Ray.
+ **ErrorCode** (Nomor) – Kode status HTTP.
+ **ErrorMessage** (String) – 1 KB pertama dari pesan kesalahan.

Jika Lambda tidak dapat mengirim pesan ke antrean dead-letter, Lambda akan menghapus acara dan mengeluarkan metrik [DeadLetterErrors](monitoring-metrics-types.md). Ini dapat terjadi karena kurangnya izin, atau jika ukuran total pesan melebihi batasan untuk antrean atau topik target. Misalnya, katakan bahwa notifikasi Amazon SNS dengan ukuran tubuh mendekati 1 MB memicu fungsi yang menghasilkan kesalahan. Dalam hal ini, data peristiwa yang ditambahkan Amazon SNS, dikombinasikan dengan atribut yang ditambahkan Lambda, dapat menyebabkan pesan melebihi ukuran maksimum yang diizinkan dalam antrian huruf mati.

Jika Anda menggunakan Amazon SQS sebagai sumber acara, konfigurasikan antrean dead-letter di Amazon SQS akan mengantre dengan sendirinya dan tidak pada fungsi Lambda. Lihat informasi yang lebih lengkap di [Menggunakan Lambda dengan Amazon SQS](with-sqs.md).

# Memohon fungsi Lambda yang tahan lama
<a name="durable-invocation"></a>

Fungsi Lambda yang tahan lama dapat dipanggil menggunakan metode yang sama dengan fungsi Lambda default, tetapi dengan pertimbangan penting untuk eksekusi yang berjalan lama. Bagian ini mencakup pola pemanggilan, manajemen eksekusi, dan praktik terbaik untuk fungsi yang tahan lama.

## Batas pemanggilan sinkron
<a name="synchronous-invocation-limits"></a>

Pemanggilan sinkron dari fungsi Lambda yang tahan lama dibatasi hingga 15 menit, sama seperti fungsi Lambda default. Jika fungsi tahan lama Anda perlu berjalan lebih dari 15 menit, itu harus dipanggil secara asinkron.

**Kapan menggunakan pemanggilan sinkron:** Gunakan untuk fungsi tahan lama yang selesai dalam 15 menit dan saat Anda membutuhkan hasil segera, seperti alur kerja persetujuan cepat atau tugas pemrosesan data singkat.

## Pemanggilan asinkron untuk alur kerja yang berjalan lama
<a name="asynchronous-invocation"></a>

Untuk fungsi tahan lama yang dapat berjalan lebih dari 15 menit, gunakan pemanggilan asinkron. Hal ini memungkinkan fungsi untuk terus berjalan sementara klien Anda menerima pengakuan langsung.

------
#### [ TypeScript ]

```
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";

const client = new LambdaClient({});

// Asynchronous invocation
const command = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "Event", // Asynchronous
  Payload: JSON.stringify({ orderId: "12345" })
});

await client.send(command);
```

------
#### [ Python ]

```
import boto3
import json

client = boto3.client('lambda')

# Asynchronous invocation
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='Event',  # Asynchronous
    Payload=json.dumps({'order_id': '12345'})
)
```

------

## Manajemen eksekusi APIs
<a name="execution-management-apis"></a>

Lambda menyediakan APIs untuk mengelola dan memantau eksekusi fungsi yang tahan lama, termasuk mencantumkan eksekusi, mendapatkan status eksekusi, dan berhenti menjalankan eksekusi.

------
#### [ TypeScript ]

```
// Get execution status
const statusCommand = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "RequestResponse",
  Payload: JSON.stringify({ 
    action: "getStatus", 
    executionId: "exec-123" 
  })
});

const result = await client.send(statusCommand);
```

------
#### [ Python ]

```
# Get execution status
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='RequestResponse',
    Payload=json.dumps({
        'action': 'get_status',
        'execution_id': 'exec-123'
    })
)
```

------

# Bagaimana Lambda memproses catatan dari sumber acara berbasis streaming dan antrian
<a name="invocation-eventsourcemapping"></a>

*Pemetaan sumber peristiwa* adalah sumber daya Lambda yang membaca item dari layanan berbasis streaming dan antrian dan memanggil fungsi dengan kumpulan catatan. Dalam pemetaan sumber peristiwa, sumber daya yang disebut *poller acara secara aktif melakukan polling* untuk pesan baru dan memanggil fungsi. Secara default, Lambda secara otomatis menskalakan poller peristiwa, tetapi untuk jenis sumber peristiwa tertentu, Anda dapat menggunakan [mode yang disediakan](#invocation-eventsourcemapping-provisioned-mode) untuk mengontrol jumlah minimum dan maksimum poller acara yang didedikasikan untuk pemetaan sumber acara Anda.

Layanan berikut menggunakan pemetaan sumber peristiwa untuk menjalankan fungsi Lambda:
+ [Amazon DocumentDB (dengan kompatibilitas MongoDB) (Amazon DocumentDB)](with-documentdb.md)
+ [Amazon DynamoDB](with-ddb.md)
+ [Amazon Kinesis](with-kinesis.md)
+ [Amazon MQ](with-mq.md)
+ [Amazon Managed Streaming for Apache Kafka (Amazon MSK)](with-msk.md)
+ [Apache Kafka yang dikelola sendiri](with-kafka.md)
+ [Amazon Simple Queue Service](with-sqs.md) (Amazon SQS)

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

## Bagaimana pemetaan sumber peristiwa berbeda dari pemicu langsung
<a name="eventsourcemapping-trigger-difference"></a>

*Beberapa Layanan AWS dapat langsung memanggil fungsi Lambda menggunakan pemicu.* Layanan ini mendorong peristiwa ke Lambda, dan fungsi segera dipanggil saat peristiwa yang ditentukan terjadi. Pemicu cocok untuk peristiwa diskrit dan pemrosesan waktu nyata. Saat Anda [membuat pemicu menggunakan konsol Lambda, konsol](lambda-services.md#lambda-invocation-trigger) berinteraksi dengan AWS layanan terkait untuk mengonfigurasi pemberitahuan peristiwa pada layanan tersebut. Pemicunya sebenarnya disimpan dan dikelola oleh layanan yang menghasilkan peristiwa, bukan oleh Lambda. Berikut adalah beberapa contoh layanan yang menggunakan pemicu untuk menjalankan fungsi Lambda:
+ **Amazon Simple Storage Service (Amazon S3)**: Memanggil fungsi saat objek dibuat, dihapus, atau dimodifikasi dalam bucket. Untuk informasi selengkapnya, lihat [Tutorial: Menggunakan pemicu Amazon S3 untuk memanggil fungsi Lambda](with-s3-example.md).
+ **Amazon Simple Notification Service (Amazon SNS)**: Memanggil fungsi saat pesan dipublikasikan ke topik SNS. Untuk informasi selengkapnya, lihat [Tutorial: Menggunakan AWS Lambda dengan Amazon Simple Notification Service](with-sns-example.md).
+ **Amazon API Gateway:** Memanggil fungsi saat permintaan API dibuat ke titik akhir tertentu. Untuk informasi selengkapnya, lihat [Memanggil fungsi Lambda menggunakan titik akhir Amazon API Gateway](services-apigateway.md).

Pemetaan sumber peristiwa adalah sumber daya Lambda yang dibuat dan dikelola dalam layanan Lambda. Pemetaan sumber peristiwa dirancang untuk memproses data streaming volume tinggi atau pesan dari antrian. Memproses catatan dari aliran atau antrian dalam batch lebih efisien daripada memproses catatan secara individual. 

## Perilaku batching
<a name="invocation-eventsourcemapping-batching"></a>

Secara default, pemetaan sumber peristiwa mengumpulkan catatan bersama menjadi satu muatan yang dikirim Lambda ke fungsi Anda. Untuk menyempurnakan perilaku batching, Anda dapat mengonfigurasi jendela batching ([MaximumBatchingWindowInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-MaximumBatchingWindowInSeconds)) dan ukuran batch (). [BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-response-BatchSize) Jendela batching adalah jumlah waktu maksimum untuk mengumpulkan catatan ke dalam satu muatan. Ukuran batch adalah jumlah maksimum catatan dalam satu batch. Lambda memanggil fungsi Anda ketika salah satu dari tiga kriteria berikut terpenuhi:
+ **Jendela batching mencapai nilai maksimumnya.** Perilaku jendela batching default bervariasi tergantung pada sumber peristiwa tertentu.
  + **Untuk sumber peristiwa Kinesis, DynamoDB, dan Amazon SQS: Jendela batching default** adalah 0 detik. Ini berarti bahwa Lambda memanggil fungsi Anda segera setelah catatan tersedia. Untuk mengatur jendela batching, konfigurasikan`MaximumBatchingWindowInSeconds`. Anda dapat mengatur parameter ini ke nilai apa pun dari 0 hingga 300 detik dengan penambahan 1 detik. Jika Anda mengonfigurasi jendela batching, jendela berikutnya dimulai segera setelah pemanggilan fungsi sebelumnya selesai.
  + **Untuk Amazon MSK, sumber acara Apache Kafka, Amazon MQ, dan Amazon DocumentDB yang dikelola sendiri: Jendela batching default adalah 500** ms. Anda dapat mengonfigurasi `MaximumBatchingWindowInSeconds` ke nilai apa pun dari 0 detik hingga 300 detik dengan penambahan detik. Dalam mode yang disediakan untuk pemetaan sumber acara Kafka, saat Anda mengonfigurasi jendela batching, jendela berikutnya dimulai segera setelah batch sebelumnya selesai. Dalam pemetaan sumber peristiwa Kafka yang tidak disediakan, saat Anda mengonfigurasi jendela batching, jendela berikutnya dimulai segera setelah pemanggilan fungsi sebelumnya selesai. Untuk meminimalkan latensi saat menggunakan pemetaan sumber peristiwa Kafka dalam mode yang disediakan, setel ke 0. `MaximumBatchingWindowInSeconds` Pengaturan ini memastikan bahwa Lambda akan mulai memproses batch berikutnya segera setelah menyelesaikan pemanggilan fungsi saat ini. Untuk informasi tambahan tentang pemrosesan latensi rendah, lihat[Latensi rendah Apache Kafka](with-kafka-low-latency.md).
  + **Untuk sumber acara Amazon MQ dan Amazon DocumentDB: Jendela** batching default adalah 500 ms. Anda dapat mengonfigurasi `MaximumBatchingWindowInSeconds` ke nilai apa pun dari 0 detik hingga 300 detik dengan penambahan detik. Jendela batching dimulai segera setelah rekor pertama tiba.
**catatan**  
Karena Anda hanya dapat mengubah `MaximumBatchingWindowInSeconds` dalam beberapa detik, Anda tidak dapat kembali ke jendela batching default 500 ms setelah Anda mengubahnya. Untuk mengembalikan jendela batching default, Anda harus membuat pemetaan sumber peristiwa baru.
+ **Ukuran batch terpenuhi.** Ukuran batch minimum adalah 1. Ukuran batch default dan maksimum bergantung pada sumber acara. Untuk detail tentang nilai-nilai ini, lihat [BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-BatchSize)spesifikasi untuk operasi `CreateEventSourceMapping` API.
+ **Ukuran payload mencapai [6 MB](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html).** Anda tidak dapat mengubah batas ini.

Diagram berikut menggambarkan ketiga kondisi ini. Misalkan jendela batching dimulai pada `t = 7` detik. Dalam skenario pertama, jendela batching mencapai maksimum 40 detik dalam `t = 47` hitungan detik setelah mengumpulkan 5 catatan. Dalam skenario kedua, ukuran batch mencapai 10 sebelum jendela batching berakhir, sehingga jendela batching berakhir lebih awal. Dalam skenario ketiga, ukuran muatan maksimum tercapai sebelum jendela batching berakhir, sehingga jendela batching berakhir lebih awal.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/batching-window.png)


Kami menyarankan Anda menguji dengan ukuran batch dan rekaman yang berbeda sehingga frekuensi polling dari setiap sumber acara disetel ke seberapa cepat fungsi Anda dapat 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.

Lambda tidak menunggu [ekstensi](lambda-extensions.md) yang dikonfigurasi selesai sebelum mengirim batch berikutnya untuk diproses. Dengan kata lain, ekstensi Anda dapat terus berjalan saat Lambda memproses kumpulan catatan berikutnya. Hal ini dapat menyebabkan masalah pembatasan jika Anda melanggar pengaturan atau [batasan konkurensi](lambda-concurrency.md) akun Anda. Untuk mendeteksi apakah ini merupakan masalah potensial, pantau fungsi Anda dan periksa apakah Anda melihat [metrik konkurensi](monitoring-concurrency.md#general-concurrency-metrics) yang lebih tinggi dari yang diharapkan untuk pemetaan sumber peristiwa Anda. Karena waktu yang singkat di antara pemanggilan, Lambda mungkin secara singkat melaporkan penggunaan konkurensi yang lebih tinggi daripada jumlah pecahan. Ini bisa benar bahkan untuk fungsi Lambda tanpa ekstensi.

Secara default, jika fungsi Anda mengembalikan kesalahan, pemetaan sumber peristiwa memproses ulang seluruh batch hingga fungsi berhasil, atau item dalam batch kedaluwarsa. Untuk memastikan pemrosesan dalam urutan, pemetaan sumber peristiwa menghentikan pemrosesan untuk pecahan yang terpengaruh hingga kesalahan teratasi. Untuk sumber aliran (DynamoDB dan Kinesis), Anda dapat mengonfigurasi jumlah maksimum kali Lambda mencoba ulang saat fungsi Anda mengembalikan kesalahan. Kesalahan layanan atau throttle di mana batch tidak mencapai fungsi Anda tidak diperhitungkan dalam upaya coba lagi. Anda juga dapat mengonfigurasi pemetaan sumber peristiwa untuk mengirim catatan pemanggilan ke [tujuan](invocation-async-retain-records.md#invocation-async-destinations) saat membuang kumpulan peristiwa.

## Mode yang disediakan
<a name="invocation-eventsourcemapping-provisioned-mode"></a>

Pemetaan sumber acara Lambda menggunakan poller acara untuk polling sumber acara Anda untuk pesan baru. Secara default, Lambda mengelola penskalaan otomatis poller ini berdasarkan volume pesan. Ketika lalu lintas pesan meningkat, Lambda secara otomatis meningkatkan jumlah poller acara untuk menangani beban, dan menguranginya saat lalu lintas menurun.

Dalam mode yang disediakan, Anda dapat menyempurnakan throughput pemetaan sumber acara Anda dengan menentukan batas minimum dan maksimum untuk sumber daya polling khusus yang tetap siap menangani pola lalu lintas yang diharapkan. Sumber daya ini secara otomatis menskalakan 3 kali lebih cepat untuk menangani lonjakan tiba-tiba dalam lalu lintas acara dan menyediakan kapasitas 16 kali lebih tinggi untuk memproses jutaan peristiwa. Ini membantu Anda membangun beban kerja berbasis peristiwa yang sangat responsif dengan persyaratan performa yang ketat.

Di Lambda, poller peristiwa adalah unit komputasi dengan kemampuan throughput yang bervariasi menurut jenis sumber peristiwa. Untuk Amazon MSK dan Apache Kafka yang dikelola sendiri, setiap poller acara dapat menangani hingga 5 throughput atau hingga 5 MB/sec pemanggilan bersamaan. Misalnya, jika sumber acara Anda menghasilkan payload rata-rata 1 MB dan durasi rata-rata fungsi Anda adalah 1 detik, satu poller acara Kafka dapat mendukung 5 MB/sec throughput dan 5 pemanggilan Lambda bersamaan (dengan asumsi tidak ada transformasi payload). Untuk Amazon SQS, setiap poller peristiwa dapat menangani hingga 1 throughput atau hingga MB/sec 10 pemanggilan bersamaan. Menggunakan mode yang disediakan menimbulkan biaya tambahan berdasarkan penggunaan poller acara Anda. Untuk detail harganya, lihat [Harga AWS Lambda](https://aws.amazon.com/lambda/pricing/).

Mode yang disediakan tersedia untuk Amazon MSK, Apache Kafka yang dikelola sendiri, dan sumber acara Amazon SQS. Meskipun pengaturan konkurensi memberi Anda kontrol atas penskalaan fungsi Anda, mode yang disediakan memberi Anda kontrol atas throughput pemetaan sumber peristiwa Anda. Untuk memastikan kinerja maksimum, Anda mungkin perlu menyesuaikan kedua pengaturan secara independen.

Mode yang disediakan sangat ideal untuk aplikasi real-time yang membutuhkan latensi pemrosesan peristiwa yang konsisten, seperti perusahaan jasa keuangan yang memproses umpan data pasar, platform e-commerce yang memberikan rekomendasi yang dipersonalisasi secara real-time, dan perusahaan game yang mengelola interaksi pemain langsung.

Setiap poller acara mendukung kapasitas throughput yang berbeda:
+ Untuk Amazon MSK dan Apache Kafka yang dikelola sendiri: hingga 5 throughput atau hingga 5 MB/sec pemanggilan bersamaan
+ Untuk Amazon SQS: hingga 1 throughput atau hingga 10 MB/sec pemanggilan bersamaan atau hingga 10 panggilan API polling SQS per detik.

Untuk pemetaan sumber peristiwa Amazon SQS, Anda dapat mengatur jumlah minimum poller antara 2 dan 200 dengan default 2, dan jumlah maksimum antara 2 dan 2.000 dengan default 200. Lambda menskalakan jumlah poller acara antara minimum dan maksimum yang dikonfigurasi, dengan cepat menambahkan hingga 1.000 konkurensi per menit untuk memberikan pemrosesan acara Anda yang konsisten dan latensi rendah.

Untuk pemetaan sumber acara Kafka, Anda dapat mengatur jumlah minimum poller antara 1 dan 200 dengan default 1, dan jumlah maksimum antara 1 dan 2.000 dengan default 200. Lambda menskalakan jumlah poller acara antara minimum dan maksimum yang dikonfigurasi berdasarkan backlog acara Anda dalam topik Anda untuk memberikan pemrosesan latensi rendah dari acara Anda.

Perhatikan bahwa untuk sumber peristiwa Amazon SQS, setelan konkurensi maksimum tidak dapat digunakan dengan mode yang disediakan. Saat menggunakan mode yang disediakan, Anda mengontrol konkurensi melalui pengaturan poller peristiwa maksimum.

Untuk detail tentang mengonfigurasi mode yang disediakan, lihat bagian berikut:
+ [Mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa MSK Amazon](kafka-scaling-modes.md)
+ [Mengkonfigurasi mode yang disediakan untuk pemetaan sumber acara Apache Kafka yang dikelola sendiri](kafka-scaling-modes.md#kafka-provisioned-mode)
+ [Menggunakan mode yang disediakan dengan pemetaan sumber peristiwa Amazon SQS](with-sqs.md#sqs-provisioned-mode)

Untuk meminimalkan latensi dalam mode yang disediakan, atur `MaximumBatchingWindowInSeconds` ke 0. Pengaturan ini memastikan bahwa Lambda akan mulai memproses batch berikutnya segera setelah menyelesaikan pemanggilan fungsi saat ini. Untuk informasi tambahan tentang pemrosesan latensi rendah, lihat[Latensi rendah Apache Kafka](with-kafka-low-latency.md).

Setelah mengonfigurasi mode yang disediakan, Anda dapat mengamati penggunaan poller peristiwa untuk beban kerja Anda dengan memantau metrik. `ProvisionedPollers` Untuk informasi selengkapnya, lihat [Metrik pemetaan sumber acara](monitoring-metrics-types.md#event-source-mapping-metrics).

## API pemetaan sumber kejadian
<a name="event-source-mapping-api"></a>

Untuk mengelola sumber peristiwa dengan [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) atau [AWS SDK](https://aws.amazon.com/getting-started/tools-sdks/), Anda dapat menggunakan operasi API berikut:
+ [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)
+ [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html)
+ [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)
+ [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)
+ [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)

# Menggunakan tag pada pemetaan sumber acara
<a name="tags-esm"></a>

Anda dapat menandai pemetaan sumber peristiwa untuk mengatur dan mengelola sumber daya Anda. Tag adalah pasangan nilai kunci bentuk bebas yang terkait dengan sumber daya Anda yang didukung secara keseluruhan. Layanan AWS Untuk informasi selengkapnya tentang kasus penggunaan tag, lihat [Strategi penandaan umum](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies) di * AWS Sumber Daya Penandaan dan Panduan Editor Tag*. 

Pemetaan sumber peristiwa dikaitkan dengan fungsi, yang dapat memiliki tag sendiri. Pemetaan sumber peristiwa tidak secara otomatis mewarisi tag dari fungsi. Anda dapat menggunakan AWS Lambda API untuk melihat dan memperbarui tag. Anda juga dapat melihat dan memperbarui tag saat mengelola pemetaan sumber peristiwa tertentu di konsol Lambda, termasuk yang menggunakan Mode Terketentuan untuk Amazon SQS.

## Izin diperlukan untuk bekerja dengan tag
<a name="esm-tags-required-permissions"></a>

Untuk mengizinkan identitas AWS Identity and Access Management (IAM) (pengguna, grup, atau peran) membaca atau menyetel tag pada sumber daya, berikan izin yang sesuai:
+ **lambda: ListTags** —Ketika sumber daya memiliki tag, berikan izin ini kepada siapa saja yang perlu memanggilnya`ListTags`. Untuk fungsi yang ditandai, izin ini juga diperlukan untuk`GetFunction`.
+ **lambda: TagResource** —Berikan izin ini kepada siapa saja yang perlu memanggil `TagResource` atau melakukan tag saat membuat.

Secara opsional, pertimbangkan untuk memberikan UntagResource izin **lambda:** juga untuk mengizinkan `UntagResource` panggilan ke sumber daya.

Untuk informasi selengkapnya, lihat [Kebijakan IAM berbasis identitas untuk Lambda](access-control-identity-based.md).

## Menggunakan tag dengan konsol Lambda
<a name="tags-esm-console"></a>

Anda dapat menggunakan konsol Lambda untuk membuat pemetaan sumber peristiwa yang memiliki tag, menambahkan tag ke pemetaan sumber peristiwa yang ada, dan memfilter pemetaan sumber peristiwa berdasarkan tag, termasuk yang dikonfigurasi dalam Mode Tertentu untuk Amazon SQS.

Saat Anda menambahkan pemicu untuk layanan berbasis streaming dan antrian yang didukung menggunakan konsol Lambda, Lambda secara otomatis membuat pemetaan sumber peristiwa. Untuk informasi lebih lanjut tentang sumber acara ini, lihat[Bagaimana Lambda memproses catatan dari sumber acara berbasis streaming dan antrian](invocation-eventsourcemapping.md). Untuk membuat pemetaan sumber peristiwa di konsol, Anda memerlukan prasyarat berikut:
+ Sebuah fungsi.
+ Sumber peristiwa dari layanan yang terpengaruh.

Anda dapat menambahkan tag sebagai bagian dari antarmuka pengguna yang sama yang Anda gunakan untuk membuat atau memperbarui pemicu.

**Untuk menambahkan tag saat Anda membuat pemetaan sumber peristiwa**

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

1. Pilih nama fungsi Anda.

1. Di bagian **Gambaran umum fungsi**, pilih **Tambah pemicu**.

1. Di bawah **konfigurasi Trigger**, dalam daftar dropdown, pilih nama layanan sumber acara Anda berasal.

1. Berikan konfigurasi inti untuk sumber acara Anda. Untuk informasi selengkapnya tentang mengonfigurasi sumber acara Anda, lihat bagian untuk layanan terkait di[Memanggil Lambda dengan acara dari layanan lain AWS](lambda-services.md).

1. Di bawah **Konfigurasi pemetaan sumber peristiwa**, pilih **Pengaturan tambahan**.

1. Di bawah **Tag**, pilih **Tambahkan tag baru**

1. Di bidang **Key**, masukkan kunci tag Anda. Untuk informasi tentang pembatasan penandaan, lihat [Batas dan persyaratan penamaan tag](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) di Panduan * AWS Sumber Daya Penandaan dan Editor Tag*.

1. Pilih **Tambahkan**.

**Untuk menambahkan tag ke pemetaan sumber peristiwa yang ada**

1. Buka [pemetaan sumber Acara di konsol Lambda](https://console.aws.amazon.com/lambda/home#/event-source-mappings).

1. Dari daftar sumber daya, pilih **UUID** untuk pemetaan sumber peristiwa yang sesuai dengan ARN **sumber** **Fungsi** dan Acara Anda.

1. Dari daftar tab di bawah **panel konfigurasi Umum**, pilih **Tag**.

1. Pilih **Kelola tanda**.

1. Pilih **Tambahkan tag baru**.

1. Di bidang **Key**, masukkan kunci tag Anda. Untuk informasi tentang pembatasan penandaan, lihat [Batas dan persyaratan penamaan tag](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) di Panduan * AWS Sumber Daya Penandaan dan Editor Tag*.

1. Pilih **Simpan**.

**Untuk memfilter pemetaan sumber peristiwa berdasarkan tag**

1. Buka [pemetaan sumber Acara di konsol Lambda](https://console.aws.amazon.com/lambda/home#/event-source-mappings).

1. Pilih kotak pencarian.

1. Dari daftar dropdown, pilih kunci tag Anda dari bawah subjudul **Tag**.

1. Pilih **Gunakan: “tag-name”** untuk melihat semua pemetaan sumber peristiwa yang ditandai dengan kunci ini, atau pilih **Operator** untuk memfilter lebih lanjut berdasarkan nilai.

1. Pilih nilai tag Anda untuk difilter dengan kombinasi kunci tag dan nilai.

Kotak pencarian juga mendukung pencarian kunci tag. Masukkan nama kunci untuk menemukannya dalam daftar.

## Menggunakan tag dengan AWS CLI
<a name="tags-esm-cli"></a>

Anda dapat menambahkan dan menghapus tag pada resource Lambda yang ada, termasuk pemetaan sumber peristiwa, dengan API Lambda. Anda juga dapat menambahkan tag saat membuat pemetaan sumber peristiwa, yang memungkinkan Anda menyimpan sumber daya yang ditandai melalui seluruh siklus hidupnya.

### Memperbarui tag dengan tag Lambda APIs
<a name="tags-esm-api-config"></a>

Anda dapat menambahkan dan menghapus tag untuk sumber daya Lambda yang didukung melalui operasi [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)dan [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)API.

Anda dapat memanggil operasi ini menggunakan AWS CLI. Untuk menambahkan tag ke sumber daya yang ada, gunakan `tag-resource` perintah. Contoh ini menambahkan dua tag, satu dengan kunci *Department* dan satu dengan kunci*CostCenter*.

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

Untuk menghapus tanda, gunakan perintah `untag-resource`. Contoh ini menghapus tag dengan kunci*Department*.

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### Menambahkan tag saat Anda membuat pemetaan sumber peristiwa
<a name="tags-esm-on-create"></a>

Untuk membuat pemetaan sumber peristiwa Lambda baru dengan tag, gunakan operasi API. [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) Tentukan parameter `Tags`. Anda dapat memanggil operasi ini dengan `create-event-source-mapping` AWS CLI perintah dan `--tags` opsi. *Untuk informasi selengkapnya tentang perintah CLI, lihat [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html)di Command Reference AWS CLI .*

Sebelum menggunakan `Tags` parameter dengan`CreateEventSourceMapping`, pastikan bahwa peran Anda memiliki izin untuk menandai sumber daya bersama izin yang biasa diperlukan untuk operasi ini. Untuk informasi selengkapnya tentang izin untuk menandai, lihat. [Izin diperlukan untuk bekerja dengan tag](#esm-tags-required-permissions)

### Melihat tag dengan tag Lambda APIs
<a name="tags-esm-api-view"></a>

Untuk melihat tag yang diterapkan ke sumber daya Lambda tertentu, gunakan operasi `ListTags` API. Untuk informasi selengkapnya, lihat [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html).

Anda dapat memanggil operasi ini dengan `list-tags` AWS CLI perintah dengan memberikan ARN (Nama Sumber Daya Amazon).

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### Memfilter sumber daya berdasarkan tag
<a name="tags-esm-filtering"></a>

Anda dapat menggunakan operasi AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html)API untuk memfilter sumber daya berdasarkan tag. `GetResources`Operasi menerima hingga 10 filter, dengan setiap filter berisi kunci tag dan hingga 10 nilai tag. Anda `GetResources` menyediakan `ResourceType` untuk memfilter berdasarkan jenis sumber daya tertentu.

Anda dapat memanggil operasi ini menggunakan `get-resources` AWS CLI perintah. Untuk contoh penggunaan`get-resources`, lihat [mendapatkan sumber daya di Referensi](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples) Perintah *AWS CLI*. 

# Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda
<a name="invocation-eventfiltering"></a>

Anda dapat menggunakan pemfilteran peristiwa untuk mengontrol rekaman mana dari aliran atau antrian yang dikirim Lambda ke fungsi Anda. Misalnya, Anda dapat menambahkan filter sehingga fungsi Anda hanya memproses pesan Amazon SQS yang berisi parameter data tertentu. Pemfilteran acara hanya berfungsi dengan pemetaan sumber peristiwa tertentu. Anda dapat menambahkan filter ke pemetaan sumber peristiwa untuk hal berikut: Layanan AWS
+ Amazon DynamoDB
+ Amazon Kinesis Data Streams
+ Amazon MQ
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ Apache Kafka yang dikelola sendiri
+ Amazon Simple Queue Service (Amazon SQS)

Untuk informasi spesifik tentang pemfilteran dengan sumber peristiwa tertentu, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service). Lambda tidak mendukung pemfilteran acara untuk Amazon DocumentDB.

Secara default, Anda dapat menentukan hingga lima filter berbeda untuk pemetaan sumber peristiwa tunggal. Filter Anda secara logis ORed bersama-sama. Jika rekaman dari sumber acara memenuhi satu atau beberapa filter Anda, Lambda menyertakan catatan di acara berikutnya yang dikirimkan ke fungsi Anda. Jika tidak ada filter Anda yang puas, Lambda membuang catatan tersebut.

**catatan**  
Jika Anda perlu menentukan lebih dari lima filter untuk sumber peristiwa, Anda dapat meminta peningkatan kuota hingga 10 filter untuk setiap sumber peristiwa. Jika Anda mencoba menambahkan lebih banyak filter daripada yang diizinkan kuota saat ini, Lambda akan menampilkan kesalahan saat Anda mencoba membuat sumber acara.

**Topics**
+ [

## Memahami dasar-dasar penyaringan acara
](#filtering-basics)
+ [

## Menangani catatan yang tidak memenuhi kriteria filter
](#filtering-criteria-not-met)
+ [

## Filter sintaks aturan
](#filtering-syntax)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)
](#filtering-console)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS CLI
](#filtering-cli)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS SAM
](#filtering-sam)
+ [

## Enkripsi kriteria filter
](#filter-criteria-encryption)
+ [

## Menggunakan filter dengan berbeda Layanan AWS
](#filtering-by-service)

## Memahami dasar-dasar penyaringan acara
<a name="filtering-basics"></a>

Objek filter criteria (`FilterCriteria`) adalah struktur yang terdiri dari daftar filter (`Filters`). Setiap filter adalah struktur yang mendefinisikan pola penyaringan peristiwa ()`Pattern`. Pola adalah representasi string dari aturan filter JSON. Struktur suatu `FilterCriteria` objek adalah sebagai berikut.

```
{
   "Filters": [
        {
            "Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa.

```
{
    "Metadata1": [ rule1 ],
    "data": {
        "Data1": [ rule2 ]
    }
}
```

Pola filter Anda dapat mencakup properti metadata, properti data, atau keduanya. Parameter metadata yang tersedia dan format parameter data bervariasi sesuai dengan Layanan AWS yang bertindak sebagai sumber peristiwa. Misalnya, misalkan pemetaan sumber peristiwa Anda menerima catatan berikut dari antrean Amazon SQS:

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\\n \"City\": \"Seattle\",\\n \"State\": \"WA\",\\n \"Temperature\": \"46\"\\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
    },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
    "awsRegion": "us-east-2"
}
```
+ **Properti metadata** adalah bidang yang berisi informasi tentang peristiwa yang membuat catatan. Dalam contoh catatan Amazon SQS, properti metadata menyertakan bidang seperti`messageID`,, dan. `eventSourceArn` `awsRegion`
+ **Properti data** adalah bidang catatan yang berisi data dari aliran atau antrian Anda. Dalam contoh peristiwa Amazon SQS, kunci untuk bidang data adalah`body`, dan properti data adalah bidang `City``State`, dan. `Temperature`

Berbagai jenis sumber acara menggunakan nilai kunci yang berbeda untuk bidang datanya. Untuk memfilter properti data, pastikan Anda menggunakan kunci yang benar dalam pola filter Anda. Untuk daftar kunci pemfilteran data, dan untuk melihat contoh pola filter untuk setiap yang didukung Layanan AWS, lihat. [Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service)

Pemfilteran acara dapat menangani penyaringan JSON multi-level. Misalnya, pertimbangkan fragmen catatan berikut dari aliran DynamoDB:

```
"dynamodb": {
    "Keys": {
        "ID": {
            "S": "ABCD"
        }
        "Number": {
            "N": "1234"
    },
    ...
}
```

Misalkan Anda hanya ingin memproses catatan tersebut di mana nilai kunci sortir `Number` adalah 4567. Dalam hal ini, `FilterCriteria` objek Anda akan terlihat seperti ini:

```
{
    "Filters": [
        {
            "Pattern": "{ \"dynamodb\": { \"Keys\": { \"Number\": { \"N\": [ "4567" ] } } } }"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa. 

```
{
    "dynamodb": {
        "Keys": {
            "Number": {
                "N": [ "4567" ]
                }
            }
        }
}
```

## Menangani catatan yang tidak memenuhi kriteria filter
<a name="filtering-criteria-not-met"></a>

Cara Lambda menangani catatan yang tidak memenuhi kriteria filter Anda tergantung pada sumber acara.
+ Untuk **Amazon SQS**, jika pesan tidak memenuhi kriteria filter Anda, Lambda secara otomatis menghapus pesan dari antrian. Anda tidak perlu menghapus pesan ini secara manual di Amazon SQS.
+ Untuk **Kinesis** dan **DynamoDB**, setelah kriteria filter Anda mengevaluasi sebuah record, iterator stream akan melewati catatan ini. Jika catatan tidak memenuhi kriteria filter Anda, Anda tidak perlu menghapus catatan secara manual dari sumber acara Anda. Setelah periode retensi, Kinesis dan DynamoDB secara otomatis menghapus catatan lama ini. Jika Anda ingin catatan dihapus lebih cepat, lihat [Mengubah Periode Retensi Data](https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html).
+ Untuk **Amazon MSK**, **Apache Kafka yang dikelola sendiri**, dan pesan Amazon **MQ, Lambda menghapus pesan** yang tidak cocok dengan semua bidang yang disertakan dalam filter. Untuk Amazon MSK dan Apache Kafka yang dikelola sendiri, Lambda melakukan offset untuk pesan yang cocok dan tak tertandingi setelah berhasil menjalankan fungsi. Untuk Amazon MQ, Lambda mengakui pesan yang cocok setelah berhasil menjalankan fungsi, dan mengakui pesan yang tak tertandingi saat memfilternya.

## Filter sintaks aturan
<a name="filtering-syntax"></a>

Untuk aturan filter, Lambda mendukung EventBridge aturan Amazon dan menggunakan sintaks yang sama seperti. EventBridge Untuk informasi selengkapnya, lihat [pola EventBridge acara Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) *di Panduan EventBridge Pengguna Amazon*.

Berikut ini adalah ringkasan dari semua operator perbandingan yang tersedia untuk pemfilteran acara Lambda.


| Operator perbandingan | Contoh | Sintaks aturan | 
| --- | --- | --- | 
|  Kosong  |  UserID adalah kosong  |  “userId”: [null]  | 
|  Kosong  |  LastName kosong  |  "LastName": [""]  | 
|  Sama dengan  |  Namanya adalah “Alice”  |  “Nama”: [“Alice”]  | 
|  Sama (abaikan kasus)  |  Namanya adalah “Alice”  |  “Name”: [\$1"equals-ignore-case“: “alice”\$1]  | 
|  Dan  |  Lokasi adalah “New York” dan Hari adalah “Senin”  |  “Lokasi”: [“New York”], “Hari”: ["Senin"]  | 
|  Atau  |  PaymentType adalah “Kredit” atau “Debit”  |  “PaymentType“: [“Kredit”, “Debit"]  | 
|  Atau (beberapa bidang)  |  Lokasi adalah “New York”, atau Hari adalah “Senin”.  |  “\$1or”: [\$1“Lokasi”: [“New York”]\$1, \$1“Hari”: [“Senin”]\$1]   | 
|  Bukan  |  Cuaca hanyalah “Hujan”  |  “Weather”: [\$1“anything-but”: [“Hujan”]\$1]  | 
|  Numerik (sama dengan)  |  Harga 100  |  “Harga”: [\$1“numerik”: [“=”, 100]\$1]  | 
|  Numerik (rentang)  |  Harga lebih dari 10, dan kurang dari atau sama dengan 20  |  “Harga”: [\$1“numerik”: [“>”, 10, “<=”, 20]\$1]  | 
|  Exists  |  ProductName ada  |  “ProductName“: [\$1“exists”: true\$1]  | 
|  Tidak ada  |  ProductName tidak ada  |  “ProductName“: [\$1“exists”: false\$1]  | 
|  Dimulai dengan  |  Wilayah ada di AS  |  “Region”: [\$1"prefix”: “us-”\$1]  | 
|  Ends with  |  FileName diakhiri dengan ekstensi.png.  |  “FileName“: [\$1“akhiran”: “.png”\$1]   | 

**catatan**  
Seperti EventBridge, untuk string, Lambda menggunakan pencocokan character-by-character yang tepat tanpa case-folding atau normalisasi string lainnya. Untuk angka, Lambda juga menggunakan representasi string. Sebagai contoh, 300, 300,0, dan 3,0e2 dianggap tidak sama.

Perhatikan bahwa operator Exists hanya bekerja pada node daun di JSON sumber acara Anda. Itu tidak cocok dengan node perantara. Misalnya, dengan JSON berikut, pola filter tidak `{ "person": { "address": [ { "exists": true } ] } }"` akan menemukan kecocokan karena `"address"` merupakan simpul perantara.

```
{
  "person": {
    "name": "John Doe",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "country": "USA"
    }
  }
}
```

## Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)
<a name="filtering-console"></a>

Ikuti langkah-langkah ini untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter menggunakan konsol Lambda.

**Untuk membuat pemetaan sumber acara baru dengan kriteria filter (konsol)**

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

1. Pilih nama fungsi untuk membuat pemetaan sumber peristiwa.

1. Di bagian **Gambaran umum fungsi**, pilih **Tambah pemicu**.

1. Untuk **konfigurasi Trigger**, pilih jenis pemicu yang mendukung pemfilteran peristiwa. Untuk daftar layanan yang didukung, lihat daftar di awal halaman ini.

1. Perluas **Pengaturan tambahan**.

1. Di bawah **Kriteria filter**, pilih **Tambah**, lalu tentukan dan masukkan filter Anda. Misalnya, Anda dapat memasukkan yang berikut ini.

   ```
   { "Metadata" : [ 1, 2 ] }
   ```

   Ini menginstruksikan Lambda untuk memproses hanya catatan di mana `Metadata` bidang sama dengan 1 atau 2. Anda dapat terus memilih **Tambah** untuk menambahkan lebih banyak filter hingga jumlah maksimum yang diizinkan.

1. Setelah selesai menambahkan filter, pilih **Simpan**.

Saat Anda memasukkan kriteria filter menggunakan konsol, Anda hanya memasukkan pola filter dan tidak perlu memberikan tanda kutip `Pattern` kunci atau escape. Pada langkah 6 dari instruksi sebelumnya, `{ "Metadata" : [ 1, 2 ] }` sesuai dengan yang berikut ini. `FilterCriteria`

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Setelah membuat pemetaan sumber acara di konsol, Anda dapat melihat format `FilterCriteria` dalam detail pemicu. Untuk lebih banyak contoh pembuatan filter acara menggunakan konsol, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service).

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS CLI
<a name="filtering-cli"></a>

Misalkan Anda ingin pemetaan sumber peristiwa memiliki yang berikut: `FilterCriteria`

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

[ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)Perintah ini membuat pemetaan sumber peristiwa Amazon SQS baru untuk fungsi `my-function` dengan yang ditentukan. `FilterCriteria`

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Perhatikan bahwa untuk memperbarui pemetaan sumber peristiwa, Anda memerlukan UUID-nya. Anda bisa mendapatkan UUID dari panggilan [ list-event-source-mappings](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html). Lambda juga mengembalikan UUID dalam respons CLI. [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)

Untuk menghapus kriteria filter dari sumber peristiwa, Anda dapat menjalankan [ update-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/update-event-source-mapping.html)perintah berikut dengan `FilterCriteria` objek kosong.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria "{}"
```

Untuk lebih banyak contoh pembuatan filter acara menggunakan AWS CLI, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service).

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS SAM
<a name="filtering-sam"></a>

 Misalkan Anda ingin mengonfigurasi sumber acara AWS SAM untuk menggunakan kriteria filter berikut: 

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

 Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa Anda, masukkan cuplikan berikut ke dalam template YAMM untuk sumber acara Anda.

```
FilterCriteria: 
  Filters: 
    - Pattern: '{"Metadata": [1, 2]}'
```

 Untuk informasi selengkapnya tentang membuat dan mengonfigurasi AWS SAM templat untuk pemetaan sumber peristiwa, lihat [ EventSource](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-eventsource.html)bagian Panduan AWS SAM Pengembang. Untuk lebih banyak contoh pembuatan filter acara menggunakan AWS SAM templat, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service). 

## Enkripsi kriteria filter
<a name="filter-criteria-encryption"></a>

Secara default, Lambda tidak mengenkripsi objek kriteria filter Anda. Untuk kasus penggunaan di mana Anda dapat menyertakan informasi sensitif dalam objek kriteria filter Anda, Anda dapat menggunakan [kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) Anda sendiri untuk mengenkripsinya.

Setelah mengenkripsi objek kriteria filter, Anda dapat melihat versi teks biasa menggunakan panggilan API. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html) Anda harus memiliki `kms:Decrypt` izin untuk dapat berhasil melihat kriteria filter dalam teks biasa.

**catatan**  
Jika objek kriteria filter Anda dienkripsi, Lambda menyunting nilai `FilterCriteria` bidang dalam respons panggilan. [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html) Sebaliknya, bidang ini ditampilkan sebagai`null`. Untuk melihat nilai sebenarnya dari`FilterCriteria`, gunakan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API.  
Untuk melihat nilai yang didekripsi `FilterCriteria` di konsol, pastikan peran IAM Anda berisi izin untuk. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)

Anda dapat menentukan kunci KMS Anda sendiri melalui konsol, API/CLI, atau. CloudFormation

**Untuk mengenkripsi kriteria filter dengan kunci KMS milik pelanggan (konsol)**

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

1. Pilih **Tambahkan pemicu**. Jika Anda sudah memiliki pemicu yang ada, pilih tab **Konfigurasi**, lalu pilih **Pemicu.** Pilih pemicu yang ada, dan pilih **Edit**.

1. Pilih kotak centang di sebelah **Enkripsi dengan kunci KMS yang dikelola pelanggan**.

1. Untuk **Pilih kunci enkripsi KMS yang dikelola pelanggan**, pilih kunci aktif yang ada atau buat kunci baru. Bergantung pada operasinya, Anda memerlukan beberapa atau semua izin berikut:`kms:DescribeKey`,`kms:GenerateDataKey`, dan`kms:Decrypt`. Gunakan kebijakan kunci KMS untuk memberikan izin ini.

Jika Anda menggunakan kunci KMS Anda sendiri, operasi API berikut harus diizinkan dalam [kebijakan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html):
+ `kms:Decrypt`— Harus diberikan kepada kepala layanan Lambda regional ()`lambda.AWS_region.amazonaws.com`. Ini memungkinkan Lambda untuk mendekripsi data dengan kunci KMS ini.
  + Untuk mencegah [masalah wakil lintas layanan yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), kebijakan kunci menggunakan kunci kondisi [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)global. Nilai `aws:SourceArn` kunci yang benar adalah ARN sumber pemetaan sumber peristiwa Anda, sehingga Anda dapat menambahkan ini ke kebijakan Anda hanya setelah Anda mengetahui ARN-nya. Lambda juga meneruskan `aws:lambda:EventSourceArn` kunci `aws:lambda:FunctionArn` dan dan nilainya masing-masing dalam [konteks enkripsi](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) saat membuat permintaan dekripsi ke KMS. Nilai-nilai ini harus sesuai dengan kondisi yang ditentukan dalam kebijakan kunci agar permintaan dekripsi berhasil. Anda tidak perlu menyertakan EventSourceArn untuk sumber acara Kafka yang dikelola sendiri karena mereka tidak memiliki. EventSourceArn
+ `kms:Decrypt`— Juga harus diberikan kepada prinsipal yang bermaksud menggunakan kunci untuk melihat kriteria filter teks biasa dalam [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)atau [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)panggilan API.
+ `kms:DescribeKey`— Memberikan rincian kunci yang dikelola pelanggan untuk memungkinkan prinsipal yang ditentukan untuk menggunakan kunci.
+ `kms:GenerateDataKey`— Memberikan izin bagi Lambda untuk menghasilkan kunci data untuk mengenkripsi kriteria filter, atas nama prinsipal yang ditentukan [(](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)enkripsi amplop).

Anda dapat menggunakan AWS CloudTrail untuk melacak AWS KMS permintaan yang dibuat Lambda atas nama Anda. Untuk contoh CloudTrail peristiwa, lihat[Memantau kunci enkripsi Anda untuk Lambda](security-encryption-at-rest.md#encryption-key-monitoring).

Kami juga merekomendasikan menggunakan tombol [https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service)kondisi untuk membatasi penggunaan kunci KMS hanya untuk permintaan dari Lambda. Nilai kunci ini adalah kepala layanan Lambda regional ()`lambda.AWS_region.amazonaws.com`. Berikut ini adalah contoh kebijakan kunci yang memberikan semua izin yang relevan:

**Example AWS KMS kebijakan kunci**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-key-policy-1",
    "Statement": [
        {
            "Sid": "Allow Lambda to decrypt using the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.us-east-1.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals" : {
                    "aws:SourceArn": [
                        "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:<esm_uuid>"
                    ]
                },
                "StringEquals": {
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:test-function",
                    "kms:EncryptionContext:aws:lambda:EventSourceArn": "arn:aws:sqs:us-east-1:123456789012:test-queue"
                }
            }
        },
        {
            "Sid": "Allow actions by an AWS account on the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key to specific roles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals" : {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}
```

Untuk menggunakan kunci KMS Anda sendiri untuk mengenkripsi kriteria filter, Anda juga dapat menggunakan perintah berikut [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) AWS CLI . Tentukan ARN kunci KMS dengan `--kms-key-arn` bendera.

```
aws lambda create-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Jika Anda memiliki pemetaan sumber peristiwa yang ada, gunakan [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html) AWS CLI perintah sebagai gantinya. Tentukan ARN kunci KMS dengan `--kms-key-arn` bendera.

```
aws lambda update-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Operasi ini menimpa setiap kunci KMS yang sebelumnya ditentukan. Jika Anda menentukan `--kms-key-arn` bendera bersama dengan argumen kosong, Lambda berhenti menggunakan kunci KMS Anda untuk mengenkripsi kriteria filter. Sebaliknya, Lambda default kembali menggunakan kunci milik Amazon.

Untuk menentukan kunci KMS Anda sendiri dalam CloudFormation template, gunakan `KMSKeyArn` properti jenis `AWS::Lambda::EventSourceMapping` sumber daya. Misalnya, Anda dapat menyisipkan cuplikan berikut ke dalam template YAMB untuk sumber acara Anda.

```
MyEventSourceMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    ...
    FilterCriteria:
      Filters:
        - Pattern: '{"a": [1, 2]}'
    KMSKeyArn: "arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599"
    ...
```

Untuk dapat melihat kriteria filter terenkripsi Anda dalam teks biasa dalam panggilan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)atau [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API, Anda harus memiliki izin. `kms:Decrypt`

Mulai 6 Agustus 2024, `FilterCriteria` bidang tidak lagi muncul di AWS CloudTrail log dari [CreateEventSourceMapping[UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html), dan panggilan [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API jika fungsi Anda tidak menggunakan pemfilteran peristiwa. Jika fungsi Anda menggunakan pemfilteran peristiwa, `FilterCriteria` bidang akan muncul sebagai empty (`{}`). Anda masih dapat melihat kriteria filter Anda dalam teks biasa dalam respons panggilan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API jika Anda memiliki `kms:Decrypt` izin untuk kunci KMS yang benar.

### Contoh entri CloudTrail log untuk Create/Update/DeleteEventSourceMapping panggilan
<a name="filter-criteria-encryption-cloudtrail"></a>

Dalam AWS CloudTrail contoh entri log berikut untuk CreateEventSourceMapping panggilan, `FilterCriteria` muncul sebagai empty (`{}`) karena fungsi menggunakan pemfilteran peristiwa. Ini adalah kasus bahkan jika `FilterCriteria` objek berisi kriteria filter yang valid yang fungsi Anda gunakan secara aktif. Jika fungsi tidak menggunakan pemfilteran peristiwa, tidak CloudTrail akan menampilkan `FilterCriteria` bidang sama sekali dalam entri log.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:userid1",
        "arn": "arn:aws:sts::123456789012:assumed-role/Example/example-role",
        "accountId": "123456789012",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA987654321EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/User1",
                "accountId": "123456789012",
                "userName": "User1"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-05-09T20:35:01Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-09T21:05:41Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateEventSourceMapping20150331",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "functionName": "example-function",
        "enabled": true,
        "batchSize": 10,
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "scalingConfig": {},
        "maximumBatchingWindowInSeconds": 0,
        "sourceAccessConfigurations": []
    },
    "responseElements": {
        "uUID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
        "batchSize": 10,
        "maximumBatchingWindowInSeconds": 0,
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:example-function",
        "lastModified": "May 9, 2024, 9:05:41 PM",
        "state": "Creating",
        "stateTransitionReason": "USER_INITIATED",
        "functionResponseTypes": [],
        "eventSourceMappingArn": "arn:aws:lambda:us-east-2:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```

## Menggunakan filter dengan berbeda Layanan AWS
<a name="filtering-by-service"></a>

Berbagai jenis sumber acara menggunakan nilai kunci yang berbeda untuk bidang datanya. Untuk memfilter properti data, pastikan Anda menggunakan kunci yang benar dalam pola filter Anda. Tabel berikut memberikan kunci penyaringan untuk setiap didukung Layanan AWS.


| Layanan AWS | Kunci penyaringan | 
| --- | --- | 
| DynamoDB | dynamodb | 
| Kinesis | data | 
| Amazon MQ | data | 
| Amazon MSK | value | 
| Apache Kafka yang dikelola sendiri | value | 
| Amazon SQS | body | 

Bagian berikut memberikan contoh pola filter untuk berbagai jenis sumber peristiwa. Mereka juga memberikan definisi format data masuk yang didukung dan format bodi pola filter untuk setiap layanan yang didukung.
+ [Menggunakan pemfilteran acara dengan sumber acara DynamoDB](with-ddb-filtering.md)
+ [Menggunakan pemfilteran acara dengan sumber acara Kinesis](with-kinesis-filtering.md)
+ [Filter peristiwa dari sumber acara Amazon MQ](with-mq-filtering.md)
+ [Memfilter acara dari Amazon MSK dan sumber acara Apache Kafka yang dikelola sendiri](kafka-filtering.md)
+ [Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS](with-sqs-filtering.md)

# Menguji fungsi Lambda di konsol
<a name="testing-functions"></a>

Anda dapat menguji fungsi Lambda di konsol dengan menjalankan fungsi Anda dengan peristiwa pengujian. *Peristiwa pengujian* adalah input JSON ke fungsi Anda. Jika fungsi Anda tidak memerlukan input, acara dapat berupa dokumen kosong`({})`.

Saat Anda menjalankan pengujian di konsol, Lambda secara sinkron memanggil fungsi Anda dengan peristiwa pengujian. Fungsi runtime mengubah acara JSON menjadi objek dan meneruskannya ke metode handler kode Anda untuk diproses.

**Buat acara pengujian**  
Sebelum Anda dapat menguji di konsol, Anda perlu membuat acara pengujian pribadi atau dapat dibagikan.

## Memanggil fungsi dengan acara pengujian
<a name="invoke-with-event"></a>

**Untuk menguji suatu fungsi**

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

1. Pilih nama fungsi yang ingin Anda uji.

1. Pilih tab **Uji**.

1. Di bawah **Acara uji**, pilih **Buat acara baru** atau **Edit acara tersimpan**, lalu pilih acara tersimpan yang ingin Anda gunakan.

1. Opsional - pilih **Template** untuk acara JSON.

1. Pilih **Uji**.

1. Untuk meninjau hasil pengujian, di bawah **Hasil eksekusi**, perluas **Detail**.

Untuk menjalankan fungsi Anda tanpa menyimpan peristiwa pengujian Anda, pilih **Uji** sebelum menyimpan. Ini menciptakan peristiwa pengujian yang belum disimpan yang dipertahankan Lambda hanya selama sesi berlangsung.

**Untuk runtime Node.js, Python, dan Ruby, Anda juga dapat mengakses peristiwa pengujian yang sudah disimpan dan belum disimpan di tab Kode.** Gunakan bagian **TEST EVENTS** untuk membuat, mengedit, dan menjalankan tes.

## Membuat acara pengujian pribadi
<a name="creating-private-events"></a>

Acara pengujian pribadi hanya tersedia untuk pembuat acara, dan tidak memerlukan izin tambahan untuk digunakan. Anda dapat membuat dan menyimpan hingga 10 acara pengujian pribadi per fungsi.

**Untuk membuat acara pengujian pribadi**

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

1. Pilih nama fungsi yang ingin Anda uji.

1. Pilih tab **Uji**.

1. Di bawah **acara Uji**, lakukan hal berikut:

   1. Pilih **Template**.

   1. Masukkan **Nama** untuk tes.

   1. Di kotak entri teks, masukkan acara uji JSON.

   1. Di bawah **Pengaturan berbagi acara**, pilih **Pribadi**.

1. Pilih **Simpan perubahan**.

**Untuk runtime Node.js, Python, dan Ruby, Anda juga dapat membuat peristiwa pengujian pada tab Kode.** Gunakan bagian **TEST EVENTS** untuk membuat, mengedit, dan menjalankan tes.

## Membuat acara uji yang dapat dibagikan
<a name="creating-shareable-events"></a>

Peristiwa pengujian yang dapat dibagikan adalah peristiwa pengujian yang dapat Anda bagikan dengan pengguna lain di AWS akun yang sama. Anda dapat mengedit peristiwa uji yang dapat dibagikan dari pengguna lain dan memanggil fungsi Anda dengan peristiwa tersebut.

Lambda menyimpan peristiwa pengujian yang dapat dibagikan sebagai skema dalam registri skema [Amazon EventBridge (CloudWatch Acara) bernama](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema-registry.html). `lambda-testevent-schemas` Karena Lambda menggunakan registri ini untuk menyimpan dan memanggil acara pengujian yang dapat dibagikan yang Anda buat, sebaiknya Anda tidak mengedit registri ini atau membuat registri menggunakan nama tersebut. `lambda-testevent-schemas`

Untuk melihat, membagikan, dan mengedit peristiwa pengujian yang dapat dibagikan, Anda harus memiliki izin untuk semua operasi API [registri skema EventBridge (CloudWatch Acara)](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/operations.html) berikut:
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema)

Harap diingat bahwa menyimpan pengeditan yang dilakukan pada peristiwa uji yang dapat dibagikan akan menimpa peristiwa tersebut.

Jika Anda tidak dapat membuat, mengedit, atau melihat peristiwa pengujian yang dapat dibagikan, periksa apakah akun Anda memiliki izin yang diperlukan untuk operasi ini. Jika Anda memiliki izin yang diperlukan tetapi masih tidak dapat mengakses peristiwa pengujian yang dapat dibagikan, periksa [kebijakan berbasis sumber daya](access-control-resource-based.md) yang mungkin membatasi akses ke registri (Peristiwa). EventBridge CloudWatch 

**Untuk membuat acara pengujian yang dapat dibagikan**

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

1. Pilih nama fungsi yang ingin Anda uji.

1. Pilih tab **Uji**.

1. Di bawah **acara Uji**, lakukan hal berikut:

   1. Pilih **Template**.

   1. Masukkan **Nama** untuk tes.

   1. Di kotak entri teks, masukkan acara uji JSON.

   1. Di bawah **Pengaturan berbagi acara**, pilih **Dapat dibagikan**.

1. Pilih **Simpan perubahan**.

**Gunakan acara pengujian yang dapat dibagikan dengan AWS Serverless Application Model.**  
Anda dapat menggunakan AWS SAM untuk memanggil acara pengujian yang dapat dibagikan. Lihat [https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html)di [Panduan AWS Serverless Application Model Pengembang](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html)

## Menghapus skema acara uji yang dapat dibagikan
<a name="deleting-test-schemas"></a>

Saat Anda menghapus peristiwa pengujian yang dapat dibagikan, Lambda menghapusnya dari `lambda-testevent-schemas` registri. Jika Anda menghapus peristiwa uji yang dapat dibagikan terakhir dari registri, Lambda akan menghapus registri tersebut.

Jika Anda menghapus fungsi, Lambda tidak menghapus skema peristiwa uji yang dapat dibagikan terkait. Anda harus membersihkan sumber daya ini secara manual dari [konsol EventBridge (CloudWatch Acara)](https://console.aws.amazon.com/events).

# Status fungsi Lambda
<a name="functions-states"></a>

Lambda menyertakan bidang [Status](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) dalam konfigurasi fungsi untuk semua fungsi untuk menunjukkan kapan fungsi Anda siap untuk dipanggil. `State`memberikan informasi tentang status fungsi saat ini, termasuk apakah Anda berhasil menjalankan fungsi tersebut. Status fungsi tidak mengubah perilaku pemanggilan fungsi atau bagaimana fungsi Anda menjalankan kode.

**catatan**  
Definisi status fungsi sedikit berbeda untuk [SnapStart](snapstart.md)fungsi. Untuk informasi selengkapnya, lihat [Lambda SnapStart dan status fungsi](snapstart-activate.md#snapstart-function-states).

Dalam banyak kasus, tabel DynamoDB adalah cara ideal untuk mempertahankan status di antara pemanggilan karena menyediakan akses data latensi rendah dan dapat menskalakan dengan layanan Lambda. Anda juga dapat menyimpan data di [Amazon EFS untuk Lambda](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) jika Anda menggunakan layanan ini, dan ini menyediakan akses latensi rendah ke penyimpanan sistem file.

Status fungsi meliputi:
+ `Pending`— Setelah Lambda membuat fungsi, ia menetapkan status ke pending. Saat dalam status tertunda, Lambda mencoba membuat atau mengonfigurasi sumber daya untuk fungsi tersebut, seperti sumber daya VPC atau EFS. Lambda tidak memanggil fungsi selama status tertunda. Setiap pemanggilan atau tindakan API lainnya yang beroperasi pada fungsi akan gagal.
+ `Active`— Fungsi Anda bertransisi ke status aktif setelah Lambda menyelesaikan konfigurasi dan penyediaan sumber daya. Fungsi hanya dapat berhasil dipanggil saat aktif.
+ `Failed`— Menunjukkan bahwa konfigurasi atau penyediaan sumber daya mengalami kesalahan. Ketika pembuatan fungsi gagal, Lambda menyetel status fungsi menjadi gagal, dan Anda harus menghapus dan membuat ulang fungsi tersebut.
+ `Inactive`— Sebuah fungsi menjadi tidak aktif ketika sudah menganggur cukup lama bagi Lambda untuk merebut kembali sumber daya eksternal yang dikonfigurasi untuknya. Saat Anda mencoba memanggil fungsi yang tidak aktif, pemanggilan gagal dan Lambda menyetel fungsi ke status tertunda hingga sumber daya fungsi dibuat ulang. Jika Lambda gagal membuat ulang sumber daya, fungsi kembali ke status tidak aktif. Anda mungkin perlu menyelesaikan kesalahan apa pun dan menerapkan kembali fungsi Anda untuk mengembalikannya ke status aktif.

Jika Anda menggunakan alur kerja otomatisasi berbasis SDK atau memanggil layanan Lambda APIs secara langsung, pastikan Anda memeriksa status fungsi sebelum pemanggilan untuk memverifikasi bahwa fungsi tersebut aktif. Anda dapat melakukan ini dengan tindakan Lambda API [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html), atau dengan mengonfigurasi pelayan menggunakan SDK for [AWS Java](https://github.com/aws/aws-sdk-java-v2) 2.0.

```
aws lambda get-function --function-name my-function --query 'Configuration.[State, LastUpdateStatus]'
```

Anda akan melihat output berikut:

```
[
 "Active",
 "Successful" 
]
```

Operasi berikut gagal saat pembuatan fungsi tertunda:
+ [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)

## Status fungsi selama pembaruan
<a name="functions-states-updating"></a>

Lambda memiliki dua operasi untuk memperbarui fungsi:
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html): Memperbarui paket penerapan fungsi
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html): Memperbarui konfigurasi fungsi

Lambda menggunakan [LastUpdateStatus](https://docs.aws.amazon.com/lambda/latest/api/API_FunctionConfiguration.html#lambda-Type-FunctionConfiguration-LastUpdateStatus)atribut untuk melacak kemajuan operasi pembaruan ini. Saat pembaruan sedang berlangsung (kapan`"LastUpdateStatus": "InProgress"`):
+ [Status](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) fungsi tetap ada`Active`.
+ Pemanggilan terus menggunakan kode dan konfigurasi fungsi sebelumnya hingga pembaruan selesai.
+ Operasi berikut gagal:
  + [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
  + [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
  + [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
  + [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)

Saat pembaruan gagal (kapan`"LastUpdateStatus": "Failed"`):
+ [Status](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) fungsi tetap ada`Active`.
+ Pemanggilan terus menggunakan kode dan konfigurasi fungsi sebelumnya.

**Example GetFunctionConfiguration respon**  
Contoh berikut adalah hasil [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)permintaan pada fungsi yang menjalani pembaruan.  

```
{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
    "Runtime": "nodejs24.x",
    "VpcConfig": {
        "SubnetIds": [
            "subnet-071f712345678e7c8",
            "subnet-07fd123456788a036",
            "subnet-0804f77612345cacf"
        ],
        "SecurityGroupIds": [
            "sg-085912345678492fb"
        ],
        "VpcId": "vpc-08e1234569e011e83"
    },
    "State": "Active",
    "LastUpdateStatus": "InProgress",
    ...
}
```

# Memahami perilaku coba lagi di Lambda
<a name="invocation-retries"></a>

Ketika Anda memanggil fungsi secara langsung, Anda menentukan strategi untuk menangani kesalahan yang terkait dengan kode fungsi Anda. Lambda tidak secara otomatis mencoba lagi jenis kesalahan ini atas nama Anda. Untuk mencoba lagi, Anda dapat memanggil ulang fungsi secara manual, mengirim peristiwa yang gagal ke antrian untuk debugging, atau mengabaikan kesalahan. Kode fungsi Anda mungkin telah berjalan sepenuhnya, sebagian, atau tidak sama sekali. Jika Anda mencoba lagi, pastikan bahwa kode fungsi Anda dapat menangani kejadian yang sama beberapa kali tanpa menyebabkan transaksi duplikat atau efek samping yang tidak diinginkan lainnya.

Saat Anda mengaktifkan suatu fungsi secara tidak langsung, Anda perlu menyadari perilaku dari invoker dan layanan apa pun yang dihadapi permintaan selama pelaksanaannya. Ini termasuk skenario berikut.
+ **Invokasi asinkron** – Lambda mencoba kembali kesalahan fungsi dua kali. Jika fungsi tidak memiliki kapasitas yang cukup untuk menangani semua permintaan yang masuk, peristiwa mungkin menunggu dalam antrian selama berjam-jam untuk dikirim ke fungsi. Anda dapat mengonfigurasikan antrean dead-letter di fungsi untuk menangkap peristiwa yang tidak berhasil diproses. Untuk informasi selengkapnya, lihat [Menambahkan antrian huruf mati](invocation-async-retain-records.md#invocation-dlq).
+ **Pemetaan sumber peristiwa** – Pemetaan sumber peristiwa yang membaca dari aliran mencoba kembali seluruh batch item. Kesalahan berulang memblokir pemrosesan shard terdampak hingga kesalahan diselesaikan atau item kedaluwarsa. Untuk mendeteksi shard yang terhambat, Anda dapat memantau metrik [Usia Iterator](monitoring-metrics.md).

  Untuk pemetaan sumber peristiwa yang membaca dari antrean, Anda menentukan lama waktu antara percobaan ulang dan destinasi untuk peristiwa yang gagal dengan mengonfigurasikan waktu habis tampilan dan kebijakan redrive pada antrean sumber. Untuk informasi selengkapnya, lihat [Bagaimana Lambda memproses catatan dari sumber acara berbasis streaming dan antrian](invocation-eventsourcemapping.md) dan topik khusus layanan di bawah [Memanggil Lambda dengan acara dari layanan lain AWS](lambda-services.md).
+ **AWS layanan — AWS layanan** dapat memanggil fungsi Anda secara sinkron atau [asinkron](invocation-sync.md). Untuk invokasi sinkron, layanan memutuskan apakah akan mencoba kembali. Misalnya, operasi batch Amazon S3 mencoba kembali operasi jika fungsi Lambda mengembalikan kode respons `TemporaryFailure`. Layanan yang meminta proxy dari pengguna atau klien hulu mungkin memiliki strategi coba lagi atau dapat menyampaikan respons kesalahan kembali ke pemohon. Misalnya, API Gateway selalu menyampaikan respons kesalahan kembali ke pemohon. 

  Untuk pemanggilan asinkron, logika coba lagi sama terlepas dari sumber pemanggilannya. Secara default, Lambda mencoba ulang pemanggilan asinkron yang gagal hingga dua kali. Untuk informasi selengkapnya, lihat [Bagaimana Lambda menangani kesalahan dan mencoba ulang dengan pemanggilan asinkron](invocation-async-error-handling.md).
+ **Akun dan klien lain** – Saat Anda memberikan akses ke akun lain, Anda dapat menggunakan [kebijakan berbasis sumber daya](access-control-resource-based.md) untuk membatasi layanan atau sumber daya yang dapat mereka konfigurasikan untuk mengaktifkan fungsi Anda. Untuk melindungi fungsi Anda dari kelebihan beban, pertimbangkan untuk meletakkan lapisan API di depan fungsi Anda dengan [Amazon API Gateway](services-apigateway.md).

Untuk membantu Anda mengatasi kesalahan dalam aplikasi Lambda, Lambda terintegrasi dengan layanan seperti Amazon dan. CloudWatch AWS X-Ray Anda dapat menggunakan kombinasi log, metrik, alarm, dan pelacakan untuk mendeteksi dan mengidentifikasi masalah dengan cepat dalam kode fungsi Anda, API, atau sumber daya lain yang mendukung aplikasi Anda. Untuk informasi selengkapnya, lihat [Pemantauan, debugging, dan pemecahan masalah fungsi Lambda](lambda-monitoring.md).

# Gunakan deteksi loop rekursif Lambda untuk mencegah loop tak terbatas
<a name="invocation-recursion"></a>

Saat Anda mengonfigurasi fungsi Lambda untuk menampilkan ke layanan atau sumber daya yang sama yang memanggil fungsi, dimungkinkan untuk membuat loop rekursif tak terbatas. Misalnya, fungsi Lambda mungkin menulis pesan ke antrean Amazon Simple Queue Service (Amazon SQS), yang kemudian memanggil fungsi yang sama. Pemanggilan ini menyebabkan fungsi untuk menulis pesan lain ke antrian, yang pada gilirannya memanggil fungsi lagi.

Loop rekursif yang tidak disengaja dapat mengakibatkan biaya tak terduga ditagih ke Anda. Akun AWS Loop juga dapat menyebabkan Lambda [menskalakan](lambda-concurrency.md) dan menggunakan semua konkurensi akun Anda yang tersedia. Untuk membantu mengurangi dampak loop yang tidak disengaja, Lambda mendeteksi jenis loop rekursif tertentu segera setelah terjadi. Secara default, ketika Lambda mendeteksi loop rekursif, Lambda menghentikan fungsi Anda dipanggil dan memberi tahu Anda. Jika desain Anda sengaja menggunakan pola rekursif, Anda dapat mengubah konfigurasi default fungsi untuk memungkinkannya dipanggil secara rekursif. Untuk informasi selengkapnya, lihat [Mengizinkan fungsi Lambda berjalan dalam loop rekursif](#invocation-recursion-disable).

**Topics**
+ [

## Memahami deteksi loop rekursif
](#invocation-recursion-concepts)
+ [

## Didukung Layanan AWS dan SDKs
](#invocation-recursion-supported)
+ [

## Pemberitahuan loop rekursif
](#invocation-recursion-monitoring)
+ [

## Menanggapi notifikasi deteksi loop rekursif
](#invocation-recursion-responding)
+ [

## Mengizinkan fungsi Lambda berjalan dalam loop rekursif
](#invocation-recursion-disable)
+ [

## Wilayah yang Didukung untuk deteksi loop rekursif Lambda
](#invocation-recursion-regions)

## Memahami deteksi loop rekursif
<a name="invocation-recursion-concepts"></a>

Deteksi loop rekursif di Lambda bekerja dengan melacak peristiwa. Lambda adalah layanan komputasi berbasis peristiwa yang menjalankan kode fungsi Anda saat peristiwa tertentu terjadi. Misalnya, saat item ditambahkan ke topik antrian Amazon SQS atau Amazon Simple Notification Service (Amazon SNS). Lambda meneruskan peristiwa ke fungsi Anda sebagai objek JSON, yang berisi informasi tentang perubahan status sistem. Ketika suatu peristiwa menyebabkan fungsi Anda berjalan, ini disebut *pemanggilan*.

Untuk mendeteksi loop rekursif, Lambda [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)menggunakan header penelusuran. Ketika [Layanan AWS mendukung deteksi loop rekursif](#invocation-recursion-supportedservices) mengirim peristiwa ke Lambda, peristiwa tersebut secara otomatis dianotasi dengan metadata. Saat fungsi Lambda Anda menulis salah satu peristiwa ini ke peristiwa lain yang didukung Layanan AWS menggunakan [versi AWS SDK yang didukung, fungsi Lambda akan memperbarui metadata](#invocation-recursion-supportedsdks) ini. Metadata yang diperbarui mencakup hitungan berapa kali acara telah memanggil fungsi.

**catatan**  
Anda tidak perlu mengaktifkan penelusuran aktif X-Ray agar fitur ini berfungsi. Deteksi loop rekursif diaktifkan secara default untuk semua AWS pelanggan. Tidak ada biaya untuk menggunakan fitur ini.

*Rantai permintaan* adalah urutan pemanggilan Lambda yang disebabkan oleh peristiwa pemicu yang sama. Misalnya, bayangkan antrian Amazon SQS memanggil fungsi Lambda Anda. Fungsi Lambda Anda kemudian mengirim peristiwa yang diproses kembali ke antrean Amazon SQS yang sama, yang memanggil fungsi Anda lagi. Dalam contoh ini, setiap pemanggilan fungsi Anda berada dalam rantai permintaan yang sama.

Jika fungsi Anda dipanggil sekitar 16 kali dalam rantai permintaan yang sama, maka Lambda secara otomatis menghentikan pemanggilan fungsi berikutnya dalam rantai permintaan tersebut dan memberi tahu Anda. Jika fungsi Anda dikonfigurasi dengan beberapa pemicu, maka pemanggilan dari pemicu lain tidak terpengaruh.

**catatan**  
Meskipun `maxReceiveCount` pengaturan pada kebijakan redrive antrian sumber lebih tinggi dari 16, perlindungan rekursi Lambda tidak mencegah Amazon SQS mencoba ulang pesan setelah loop rekursif terdeteksi dan dihentikan. Ketika Lambda mendeteksi loop rekursif dan menjatuhkan pemanggilan berikutnya, ia mengembalikan a `RecursiveInvocationException` ke pemetaan sumber peristiwa. Ini meningkatkan `receiveCount` nilai pada pesan. Lambda terus mencoba lagi pesan, dan terus memblokir pemanggilan fungsi, hingga Amazon SQS menentukan bahwa terlampaui dan mengirim pesan ke antrian `maxReceiveCount` huruf mati yang dikonfigurasi.

Jika Anda memiliki [tujuan yang gagal](invocation-async-retain-records.md#invocation-async-destinations) atau [antrean huruf mati yang](invocation-async-retain-records.md#invocation-dlq) dikonfigurasi untuk fungsi Anda, maka Lambda juga mengirimkan acara dari pemanggilan yang dihentikan ke antrean tujuan atau surat mati Anda. Saat mengonfigurasi antrian tujuan atau huruf mati untuk fungsi Anda, pastikan untuk tidak menggunakan pemicu peristiwa atau pemetaan sumber peristiwa yang juga digunakan fungsi Anda. Jika Anda mengirim peristiwa ke sumber daya yang sama yang memanggil fungsi Anda, maka Anda dapat membuat loop rekursif lain dan loop ini juga akan dihentikan. Jika Anda memilih keluar dari deteksi loop rekursi, loop ini tidak akan dihentikan.

## Didukung Layanan AWS dan SDKs
<a name="invocation-recursion-supported"></a>

Lambda hanya dapat mendeteksi loop rekursif yang menyertakan dukungan tertentu. Layanan AWS Agar loop rekursif terdeteksi, fungsi Anda juga harus menggunakan salah satu yang didukung AWS SDKs.

### Didukung Layanan AWS
<a name="invocation-recursion-supportedservices"></a>

Lambda saat ini mendeteksi loop rekursif antara fungsi Anda, Amazon SQS, Amazon S3, dan Amazon SNS. Lambda juga mendeteksi loop yang hanya terdiri dari fungsi Lambda, yang dapat memanggil satu sama lain secara sinkron atau asinkron. Diagram berikut menunjukkan beberapa contoh loop yang dapat dideteksi Lambda:

![\[Diagram loop rekursif antara fungsi Lambda, Amazon SNS, Amazon S3, dan antrian Amazon SQS.\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/RunawayWorkloadDetected_v3.png)


Ketika yang lain Layanan AWS seperti Amazon DynamoDB membentuk bagian dari loop, Lambda saat ini tidak dapat mendeteksi dan menghentikannya.

Karena Lambda saat ini hanya mendeteksi loop rekursif yang melibatkan Amazon SQS, Amazon S3, dan Amazon SNS, masih mungkin loop yang melibatkan lainnya Layanan AWS dapat mengakibatkan penggunaan fungsi Lambda Anda yang tidak diinginkan.

Untuk mencegah tagihan tak terduga yang ditagih ke Anda Akun AWS, kami sarankan Anda mengonfigurasi [ CloudWatchalarm Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) untuk mengingatkan Anda tentang pola penggunaan yang tidak biasa. Misalnya, Anda dapat mengonfigurasi CloudWatch untuk memberi tahu Anda tentang lonjakan dalam konkurensi atau pemanggilan fungsi Lambda. Anda juga dapat mengonfigurasi [alarm penagihan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html) untuk memberi tahu Anda saat pengeluaran di akun melebihi ambang batas yang Anda tentukan. Atau, Anda dapat menggunakannya [AWS Cost Anomaly Detection](https://docs.aws.amazon.com/cost-management/latest/userguide/manage-ad.html)untuk mengingatkan Anda tentang pola penagihan yang tidak biasa.

### Didukung AWS SDKs
<a name="invocation-recursion-supportedsdks"></a>

Agar Lambda dapat mendeteksi loop rekursif, fungsi Anda harus menggunakan salah satu versi SDK berikut atau yang lebih tinggi:


| Waktu Aktif | Versi AWS SDK minimum yang diperlukan | 
| --- | --- | 
|  Node.js  |  2.1147.0 (SDK versi 2) 3.105.0 (SDK versi 3)  | 
|  Python  |  1.24.46 (Boto3) 1.27.46 (botocore)  | 
|  Java 8 dan Java 11  |  2.17.135  | 
|  Jawa 17  |  2.20.81  | 
|  Jawa 21  |  2.21.24  | 
|  .NET  |  3.7.293.0  | 
|  Ruby  |  3.134.0  | 
|  PHP  |  3.232.0  | 
|  Go  |  V2 SDK 1,57,0  | 

Beberapa runtime Lambda seperti Python dan Node.js menyertakan versi SDK. AWS Jika versi SDK yang disertakan dalam runtime fungsi Anda lebih rendah dari minimum yang diperlukan, Anda dapat menambahkan versi SDK yang didukung ke paket penerapan fungsi Anda. Anda juga dapat menambahkan versi SDK yang didukung ke fungsi Anda menggunakan lapisan [Lambda](chapter-layers.md). Untuk daftar yang SDKs disertakan dengan setiap runtime Lambda, lihat. [Runtime Lambda](lambda-runtimes.md)

## Pemberitahuan loop rekursif
<a name="invocation-recursion-monitoring"></a>

Ketika Lambda menghentikan loop rekursif, Anda menerima pemberitahuan melalui [Dasbor Health](https://aws.amazon.com/premiumsupport/technology/aws-health-dashboard/)dan melalui email. Anda juga dapat menggunakan CloudWatch metrik untuk memantau jumlah pemanggilan rekursif yang dihentikan Lambda.

### Dasbor Health pemberitahuan
<a name="invocation-recursion-phd"></a>

[Ketika Lambda menghentikan pemanggilan rekursif, akan Dasbor Health menampilkan pemberitahuan di halaman **kesehatan akun Anda**, di bawah Terbuka dan masalah terbaru.](https://health.aws.amazon.com/health/home#/account/dashboard/open-issues) Perhatikan bahwa ini dapat memakan waktu hingga 3,5 jam setelah Lambda menghentikan pemanggilan rekursif sebelum pemberitahuan ini ditampilkan. Untuk informasi selengkapnya tentang melihat peristiwa akun di Dasbor Health, lihat [Memulai dengan Dasbor AWS Kesehatan — Kesehatan akun Anda](https://docs.aws.amazon.com/health/latest/ug/getting-started-health-dashboard.html) di *Panduan Pengguna AWS Kesehatan*.

### Peringatan email
<a name="invocation-recursion-email"></a>

Saat Lambda pertama kali menghentikan pemanggilan rekursif fungsi Anda, Lambda mengirimkan peringatan email kepada Anda. Lambda mengirim maksimal satu email setiap 24 jam untuk setiap fungsi di Anda. Akun AWS Setelah Lambda mengirimkan pemberitahuan email, Anda tidak akan menerima email lagi untuk fungsi itu selama 24 jam lagi, bahkan jika Lambda menghentikan pemanggilan rekursif lebih lanjut dari fungsi tersebut. Perhatikan bahwa ini dapat memakan waktu hingga 3,5 jam setelah Lambda menghentikan pemanggilan rekursif sebelum Anda menerima peringatan email ini.

Lambda mengirimkan peringatan email loop rekursif ke kontak akun utama Anda Akun AWS dan kontak operasi alternatif Anda. Untuk informasi tentang melihat atau memperbarui alamat email di akun Anda, lihat [Memperbarui informasi kontak](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact.html) di *Referensi AWS Umum*.

### CloudWatch Metrik Amazon
<a name="invocation-recursion-cloudwatch"></a>

[CloudWatch Metrik](monitoring-metrics-types.md) `RecursiveInvocationsDropped` mencatat jumlah pemanggilan fungsi yang dihentikan Lambda karena fungsi Anda telah dipanggil lebih dari sekitar 16 kali dalam satu rantai permintaan. Lambda memancarkan metrik ini segera setelah menghentikan pemanggilan rekursif. Untuk melihat metrik ini, ikuti petunjuk untuk [Melihat metrik di CloudWatch konsol](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html#monitoring-metrics-console) dan pilih metrik`RecursiveInvocationsDropped`.

## Menanggapi notifikasi deteksi loop rekursif
<a name="invocation-recursion-responding"></a>

Ketika fungsi Anda dipanggil lebih dari sekitar 16 kali oleh peristiwa pemicu yang sama, Lambda menghentikan pemanggilan fungsi berikutnya untuk acara tersebut untuk memutus loop rekursif. Untuk mencegah terulangnya loop rekursif yang rusak Lambda, lakukan hal berikut: 
+ Kurangi [konkurensi](lambda-concurrency.md) fungsi Anda yang tersedia menjadi nol, yang membatasi semua pemanggilan future.
+ Hapus atau nonaktifkan pemicu atau pemetaan sumber peristiwa yang menjalankan fungsi Anda.
+ Identifikasi dan perbaiki cacat kode yang menulis peristiwa kembali ke AWS sumber daya yang menjalankan fungsi Anda. Sebuah sumber umum cacat terjadi ketika Anda menggunakan variabel untuk menentukan sumber peristiwa fungsi dan target. Periksa apakah Anda tidak menggunakan nilai yang sama untuk kedua variabel.

Selain itu, jika sumber peristiwa untuk fungsi Lambda Anda adalah antrean Amazon SQS, [pertimbangkan untuk mengonfigurasi antrian huruf mati pada antrean](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html) sumber.

**catatan**  
Pastikan Anda mengonfigurasi antrean surat gagal di antrean sumber, bukan di fungsi Lambda. Antrean surat gagal yang dikonfigurasikan di fungsi digunakan untuk [antrean invokasi asinkron](invocation-async.md) fungsi, bukan untuk antrean sumber kejadian.

Jika sumber acara adalah topik Amazon SNS, pertimbangkan untuk menambahkan [tujuan yang gagal](invocation-async-retain-records.md#invocation-async-destinations) untuk fungsi Anda.

**Untuk mengurangi konkurensi fungsi Anda yang tersedia menjadi nol (konsol)**

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

1. Pilih nama fungsi Anda.

1. Pilih **Throttle**.

1. **Di kotak dialog **Throttle your function**, pilih Confirm.**

**Untuk menghapus pemicu atau pemetaan sumber peristiwa untuk fungsi Anda (konsol)**

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

1. Pilih nama fungsi Anda.

1. Pilih tab **Konfigurasi**, lalu pilih **Pemicu.**

1. **Di bawah **Pemicu**, pilih pemicu atau pemetaan sumber peristiwa yang ingin Anda hapus, lalu pilih Hapus.**

1. Di kotak dialog **Hapus pemicu**, pilih **Hapus**.

**Untuk menonaktifkan pemetaan sumber peristiwa untuk fungsi Anda ()AWS CLI**

1. Untuk menemukan UUID untuk pemetaan sumber peristiwa yang ingin Anda nonaktifkan, jalankan perintah AWS Command Line Interface ()AWS CLI. [list-event-source-mappings](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/list-event-source-mappings.html)

   ```
   aws lambda list-event-source-mappings
   ```

1. Untuk menonaktifkan pemetaan sumber peristiwa, jalankan AWS CLI [update-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html)perintah berikut.

   ```
   aws lambda update-event-source-mapping --function-name MyFunction \
   --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 --no-enabled
   ```

## Mengizinkan fungsi Lambda berjalan dalam loop rekursif
<a name="invocation-recursion-disable"></a>

Jika desain Anda sengaja menggunakan loop rekursif, Anda dapat mengonfigurasi fungsi Lambda untuk memungkinkannya dipanggil secara rekursif. Kami menyarankan Anda menghindari penggunaan loop rekursif dalam desain Anda. Kesalahan implementasi dapat menyebabkan pemanggilan rekursif menggunakan semua konkurensi Anda Akun AWS yang tersedia dan biaya tak terduga yang ditagih ke akun Anda.

**penting**  
Jika Anda menggunakan loop rekursif, perlakukan dengan hati-hati. Menerapkan best practice guard rail untuk meminimalkan risiko kesalahan implementasi. Untuk mempelajari lebih lanjut tentang praktik terbaik untuk menggunakan pola rekursif, lihat Pola [rekursif yang menyebabkan fungsi Lambda yang tidak terkendali](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/recursive-runaway) di Tanah Tanpa Server.

Anda dapat mengonfigurasi fungsi untuk mengizinkan loop rekursif menggunakan konsol Lambda, AWS Command Line Interface AWS CLI(), dan [PutFunctionRecursionConfig](https://docs.aws.amazon.com//lambda/latest/api/API_PutFunctionRecursionConfig.html)API. Anda juga dapat mengonfigurasi pengaturan deteksi loop rekursif fungsi di AWS SAM dan CloudFormation. 

Secara default, Lambda mendeteksi dan mengakhiri loop rekursif. Kecuali desain Anda sengaja menggunakan loop rekursif, sebaiknya Anda tidak mengubah konfigurasi default fungsi Anda.

Perhatikan bahwa saat Anda mengonfigurasi fungsi untuk mengizinkan loop rekursif, [CloudWatch metrik](monitoring-metrics-types.md#invocation-metrics) `RecursiveInvocationsDropped` tidak dipancarkan.

------
#### [ Console ]

**Untuk memungkinkan fungsi berjalan dalam loop rekursif (konsol)**

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

1. Pilih nama fungsi Anda untuk membuka halaman detail fungsi.

1. Pilih tab **Konfigurasi**, lalu pilih **Konkurensi dan deteksi rekursi.**

1. Selain **deteksi loop rekursif**, pilih **Edit**.

1. Pilih **Izinkan loop rekursif**.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

Anda dapat menggunakan [PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API untuk memungkinkan fungsi Anda dipanggil dalam loop rekursif. Tentukan `Allow` untuk parameter loop rekursif. Misalnya, Anda dapat memanggil API ini dengan `put-function-recursion-config` AWS CLI perintah:

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Allow
```

------

Anda dapat mengubah konfigurasi fungsi Anda kembali ke pengaturan default sehingga Lambda menghentikan loop rekursif saat mendeteksi mereka. Edit konfigurasi fungsi Anda menggunakan konsol Lambda atau. AWS CLI

------
#### [ Console ]

**Untuk mengkonfigurasi fungsi sehingga loop rekursif dihentikan (konsol)**

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

1. Pilih nama fungsi Anda untuk membuka halaman detail fungsi.

1. Pilih tab **Konfigurasi**, lalu pilih **Konkurensi dan deteksi rekursi.**

1. Selain **deteksi loop rekursif**, pilih **Edit**.

1. Pilih **Hentikan loop rekursif.**

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

Anda dapat menggunakan [PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API untuk mengonfigurasi fungsi Anda sehingga Lambda menghentikan loop rekursif saat mendeteksi mereka. Tentukan `Terminate` untuk parameter loop rekursif. Misalnya, Anda dapat memanggil API ini dengan `put-function-recursion-config` AWS CLI perintah:

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Terminate
```

------

## Wilayah yang Didukung untuk deteksi loop rekursif Lambda
<a name="invocation-recursion-regions"></a>

Deteksi loop rekursif Lambda didukung di semua Wilayah [komersial kecuali](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#region) Meksiko (Tengah) dan Asia Pasifik (Selandia Baru).

# Membuat dan mengelola fungsi Lambda URLs
<a name="urls-configuration"></a>

URL fungsi adalah titik akhir HTTP (S) khusus untuk fungsi Lambda Anda. Anda dapat membuat dan mengonfigurasi URL fungsi melalui konsol Lambda atau API Lambda.

**Tip**  
Lambda menawarkan dua cara untuk menjalankan fungsi Anda melalui titik akhir HTTP: fungsi dan Amazon API URLs Gateway. Jika Anda tidak yakin metode mana yang terbaik untuk kasus penggunaan Anda, lihat[Pilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP](furls-http-invoke-decision.md).

Saat Anda membuat URL fungsi, Lambda secara otomatis menghasilkan titik akhir URL unik untuk Anda. Setelah Anda membuat URL fungsi, titik akhir URL-nya tidak pernah berubah. Titik akhir URL fungsi memiliki format berikut:

```
https://<url-id>.lambda-url.<region>.on.aws
```

**catatan**  
Fungsi tidak URLs didukung sebagai berikut Wilayah AWS: Asia Pasifik (Hyderabad) (), Asia Pasifik (Melbourne`ap-south-2`) (), Asia Pasifik (Malaysia`ap-southeast-4`) (), Asia Pasifik (Selandia Baru`ap-southeast-5`) (), Asia Pasifik (Thailand`ap-southeast-6`) (), Asia Pasifik (Taipei`ap-southeast-7`) (), Kanada Barat (Calgary) ()`ap-east-2`, Eropa (Spanyol) ()`ca-west-1`, Eropa (Zurich) (`eu-south-2`), Israel (Tel Aviv) ()`eu-central-2`, dan Timur Tengah (UEA) (`il-central-1`). `me-central-1`

Fungsi URLs adalah dual stack-enabled, mendukung dan. IPv4 IPv6 Setelah Anda mengkonfigurasi URL fungsi untuk fungsi Anda, Anda dapat memanggil fungsi Anda melalui titik akhir HTTP (S) melalui browser web, curl, Postman, atau klien HTTP apa pun.

**catatan**  
Anda dapat mengakses URL fungsi Anda hanya melalui Internet publik. Sementara fungsi Lambda mendukung AWS PrivateLink, fungsi URLs tidak.

Fungsi Lambda URLs menggunakan [kebijakan berbasis sumber daya](access-control-resource-based.md) untuk keamanan dan kontrol akses. Fungsi URLs juga mendukung opsi konfigurasi cross-origin resource sharing (CORS).

Anda dapat menerapkan fungsi URLs ke alias fungsi apa pun, atau ke versi fungsi yang `$LATEST` tidak dipublikasikan. Anda tidak dapat menambahkan URL fungsi ke versi fungsi lainnya.

Bagian berikut menunjukkan cara membuat dan mengelola URL fungsi menggunakan konsol Lambda, AWS CLI, dan template CloudFormation 

**Topics**
+ [

## Membuat URL fungsi (konsol)
](#create-url-console)
+ [

## Membuat URL fungsi (AWS CLI)
](#create-url-cli)
+ [

## Menambahkan URL fungsi ke CloudFormation template
](#urls-cfn)
+ [

## Berbagi sumber daya lintas asal (CORS)
](#urls-cors)
+ [

## Fungsi pelambatan URLs
](#urls-throttling)
+ [

## Menonaktifkan fungsi URLs
](#urls-deactivating)
+ [

## Menghapus fungsi URLs
](#w2aac39c81c53)
+ [

# Kontrol akses ke fungsi Lambda URLs
](urls-auth.md)
+ [

# Memanggil fungsi Lambda URLs
](urls-invocation.md)
+ [

# Memantau fungsi Lambda URLs
](urls-monitoring.md)
+ [

# Pilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP
](furls-http-invoke-decision.md)
+ [

# Tutorial: Membuat titik akhir webhook menggunakan URL fungsi Lambda
](urls-webhook-tutorial.md)

## Membuat URL fungsi (konsol)
<a name="create-url-console"></a>

Ikuti langkah-langkah ini untuk membuat URL fungsi menggunakan konsol.

### Untuk membuat URL fungsi untuk fungsi yang ada
<a name="create-url-existing-function"></a>

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

1. Pilih nama fungsi yang ingin Anda buat URL fungsi.

1. Pilih tab **Konfigurasi**, lalu pilih **URL Fungsi**.

1. Pilih **Buat URL fungsi**.

1. Untuk **jenis Auth**, pilih **AWS\$1IAM**atau **NONE**. Untuk informasi selengkapnya tentang otentikasi URL fungsi, lihat[Kontrol akses](urls-auth.md).

1. (Opsional) Pilih **Konfigurasi berbagi sumber daya lintas asal (CORS)**, lalu konfigurasikan pengaturan CORS untuk URL fungsi Anda. Untuk informasi selengkapnya tentang CORS, lihat [Berbagi sumber daya lintas asal (CORS)](#urls-cors).

1. Pilih **Simpan**.

Ini membuat URL fungsi untuk versi fungsi Anda `$LATEST` yang tidak dipublikasikan. URL fungsi muncul di bagian **Ikhtisar fungsi** konsol.

### Untuk membuat URL fungsi untuk alias yang ada
<a name="create-url-existing-alias"></a>

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

1. Pilih nama fungsi dengan alias yang ingin Anda buat URL fungsi.

1. Pilih tab **Alias**, lalu pilih nama alias yang ingin Anda buat URL fungsinya.

1. Pilih tab **Konfigurasi**, lalu pilih **URL Fungsi**.

1. Pilih **Buat URL fungsi**.

1. Untuk **jenis Auth**, pilih **AWS\$1IAM**atau **NONE**. Untuk informasi selengkapnya tentang otentikasi URL fungsi, lihat[Kontrol akses](urls-auth.md).

1. (Opsional) Pilih **Konfigurasi berbagi sumber daya lintas asal (CORS)**, lalu konfigurasikan pengaturan CORS untuk URL fungsi Anda. Untuk informasi selengkapnya tentang CORS, lihat [Berbagi sumber daya lintas asal (CORS)](#urls-cors).

1. Pilih **Simpan**.

Ini membuat URL fungsi untuk alias fungsi Anda. URL fungsi muncul di bagian **Ikhtisar fungsi** konsol untuk alias Anda.

### Untuk membuat fungsi baru dengan URL fungsi
<a name="create-url-new-function"></a>

**Untuk membuat fungsi baru dengan URL fungsi (konsol)**

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

1. Pilih **Buat fungsi**.

1. Di bagian **Informasi dasar**, lakukan hal berikut:

   1. Untuk **nama Fungsi**, masukkan nama untuk fungsi Anda, seperti**my-function**.

   1. Untuk **Runtime**, pilih runtime bahasa yang Anda inginkan, seperti **Node.js** 24.

   1. **Untuk **Arsitektur**, pilih **x86\$164 atau arm64**.**

   1. **Perluas Izin**, lalu pilih apakah akan membuat peran eksekusi baru atau menggunakan yang sudah ada.

1. Perluas **Pengaturan lanjutan**, lalu pilih **URL Fungsi**.

1. Untuk **jenis Auth**, pilih **AWS\$1IAM**atau **NONE**. Untuk informasi selengkapnya tentang otentikasi URL fungsi, lihat[Kontrol akses](urls-auth.md).

1. (Opsional) Pilih **Konfigurasi berbagi sumber daya lintas asal (CORS**). Dengan memilih opsi ini selama pembuatan fungsi, URL fungsi Anda memungkinkan permintaan dari semua asal secara default. Anda dapat mengedit pengaturan CORS untuk URL fungsi Anda setelah membuat fungsi. Untuk informasi selengkapnya tentang CORS, lihat [Berbagi sumber daya lintas asal (CORS)](#urls-cors).

1. Pilih **Buat fungsi**.

Ini menciptakan fungsi baru dengan URL fungsi untuk versi fungsi `$LATEST` yang tidak dipublikasikan. URL fungsi muncul di bagian **Ikhtisar fungsi** konsol.

## Membuat URL fungsi (AWS CLI)
<a name="create-url-cli"></a>

Untuk membuat URL fungsi untuk fungsi Lambda yang ada menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut:

```
aws lambda create-function-url-config \
    --function-name my-function \
    --qualifier prod \ // optional
    --auth-type AWS_IAM
    --cors-config {AllowOrigins="https://example.com"} // optional
```

Ini menambahkan URL fungsi ke **prod** qualifier untuk fungsi **my-function** tersebut. Untuk informasi selengkapnya tentang parameter konfigurasi ini, lihat [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)di referensi API.

**catatan**  
Untuk membuat URL fungsi melalui AWS CLI, fungsi tersebut harus sudah ada.

## Menambahkan URL fungsi ke CloudFormation template
<a name="urls-cfn"></a>

Untuk menambahkan `AWS::Lambda::Url` sumber daya ke CloudFormation template Anda, gunakan sintaks berikut:

### JSON
<a name="urls-cfn-json"></a>

```
{
  "Type" : "AWS::Lambda::Url",
  "Properties" : {
      "AuthType" : String,
      "Cors" : Cors,
      "Qualifier" : String,
      "TargetFunctionArn" : String
    }
}
```

### YAML
<a name="urls-cfn-yaml"></a>

```
Type: AWS::Lambda::Url
Properties: 
  AuthType: String
  Cors: 
    Cors
  Qualifier: String
  TargetFunctionArn: String
```

### Parameter
<a name="urls-cfn-params"></a>
+ (Wajib) `AuthType` — Mendefinisikan jenis otentikasi untuk URL fungsi Anda. Nilai yang mungkin adalah salah satu `AWS_IAM` atau`NONE`. Untuk membatasi akses ke pengguna yang diautentikasi saja, setel ke. `AWS_IAM` Untuk melewati otentikasi IAM dan memungkinkan pengguna untuk membuat permintaan ke fungsi Anda, atur ke. `NONE`
+ (Opsional) `Cors` - Mendefinisikan [pengaturan CORS untuk URL](#urls-cors) fungsi Anda. `Cors`Untuk menambah `AWS::Lambda::Url` sumber daya Anda CloudFormation, gunakan sintaks berikut.

    
**Example AWS: :Lambda: :Url.Cor (JSON)**  

  ```
  {
    "AllowCredentials" : Boolean,
    "AllowHeaders" : [ String, ... ],
    "AllowMethods" : [ String, ... ],
    "AllowOrigins" : [ String, ... ],
    "ExposeHeaders" : [ String, ... ],
    "MaxAge" : Integer
  }
  ```  
**Example AWS: :Lambda: :Url.Cor (YAMAL)**  

  ```
    AllowCredentials: Boolean
    AllowHeaders: 
      - String
    AllowMethods: 
      - String
    AllowOrigins: 
      - String
    ExposeHeaders: 
      - String
    MaxAge: Integer
  ```
+ (Opsional) `Qualifier` — Nama alias.
+ (Wajib) `TargetFunctionArn` - Nama atau Nama Sumber Daya Amazon (ARN) dari fungsi Lambda. Format nama yang valid meliputi yang berikut:
  + **Nama fungsi** - `my-function`
  + **Fungsi ARN** — `arn:aws:lambda:us-west-2:123456789012:function:my-function`
  + **ARN Sebagian** — `123456789012:function:my-function`

## Berbagi sumber daya lintas asal (CORS)
<a name="urls-cors"></a>

Untuk menentukan bagaimana asal yang berbeda dapat mengakses URL fungsi Anda, gunakan [berbagi sumber daya lintas asal (CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)). Kami menyarankan untuk mengonfigurasi CORS jika Anda bermaksud memanggil URL fungsi Anda dari domain yang berbeda. Lambda mendukung header CORS berikut untuk fungsi. URLs


| Sundulan CORS | Properti konfigurasi CORS | Contoh nilai | 
| --- | --- | --- | 
|  [ Access-Control-Allow-Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)  |  `AllowOrigins`  |  `*`(izinkan semua asal) `https://www.example.com` `http://localhost:60905`  | 
|  [ Access-Control-Allow-Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods)  |  `AllowMethods`  |  `GET`, `POST`, `DELETE`, `*`  | 
|  [ Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)  |  `AllowHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Expose-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers)  |  `ExposeHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Allow-Credentials](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)  |  `AllowCredentials`  |  `TRUE`  | 
|  [ Access-Control-Max-Age](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age)  |  `MaxAge`  |  `5` (default), `300`  | 

Saat Anda mengonfigurasi CORS untuk URL fungsi menggunakan konsol Lambda atau konsol AWS CLI, Lambda secara otomatis menambahkan header CORS ke semua respons melalui URL fungsi. Atau, Anda dapat menambahkan header CORS secara manual ke respons fungsi Anda. Jika ada header yang bertentangan, perilaku yang diharapkan tergantung pada jenis permintaan:
+ Untuk permintaan preflight seperti permintaan OPTIONS, header CORS yang dikonfigurasi pada URL fungsi diutamakan. Lambda hanya mengembalikan header CORS ini dalam respons.
+ Untuk permintaan non-preflight seperti permintaan GET atau POST, Lambda mengembalikan header CORS yang dikonfigurasi pada URL fungsi, serta header CORS yang dikembalikan oleh fungsi. Ini dapat menghasilkan duplikat header CORS dalam respons. Anda mungkin melihat kesalahan yang mirip dengan berikut ini:`The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed`.

Secara umum, kami menyarankan untuk mengonfigurasi semua pengaturan CORS pada URL fungsi, daripada mengirim header CORS secara manual dalam respons fungsi.

## Fungsi pelambatan URLs
<a name="urls-throttling"></a>

Throttling membatasi tingkat permintaan proses fungsi Anda. Ini berguna dalam banyak situasi, seperti mencegah fungsi Anda membebani sumber daya hilir, atau menangani lonjakan permintaan yang tiba-tiba.

Anda dapat membatasi laju permintaan yang diproses fungsi Lambda Anda melalui URL fungsi dengan mengonfigurasi konkurensi cadangan. Konkurensi cadangan membatasi jumlah pemanggilan bersamaan maksimum untuk fungsi Anda. Tingkat permintaan maksimum per detik (RPS) fungsi Anda setara dengan 10 kali konkurensi cadangan yang dikonfigurasi. Misalnya, jika Anda mengonfigurasi fungsi Anda dengan konkurensi cadangan 100, maka RPS maksimum adalah 1.000.

Setiap kali konkurensi fungsi Anda melebihi konkurensi cadangan, URL fungsi Anda mengembalikan kode `429` status HTTP. Jika fungsi Anda menerima permintaan yang melebihi maksimum 10x RPS berdasarkan konkurensi cadangan yang dikonfigurasi, Anda juga menerima kesalahan HTTP. `429` Untuk informasi selengkapnya tentang konkurensi cadangan, lihat[Mengkonfigurasi konkurensi cadangan untuk suatu fungsi](configuration-concurrency.md).

## Menonaktifkan fungsi URLs
<a name="urls-deactivating"></a>

Dalam keadaan darurat, Anda mungkin ingin menolak semua lalu lintas ke URL fungsi Anda. Untuk menonaktifkan URL fungsi Anda, atur konkurensi cadangan ke nol. Ini membatasi semua permintaan ke URL fungsi Anda, menghasilkan respons `429` status HTTP. Untuk mengaktifkan kembali URL fungsi Anda, hapus konfigurasi konkurensi cadangan, atau atur konfigurasi ke jumlah yang lebih besar dari nol.

## Menghapus fungsi URLs
<a name="w2aac39c81c53"></a>

Saat Anda menghapus URL fungsi, Anda tidak dapat memulihkannya. Membuat URL fungsi baru akan menghasilkan alamat URL yang berbeda.

**catatan**  
Jika Anda menghapus URL fungsi dengan jenis autentikasi`NONE`, Lambda tidak secara otomatis menghapus kebijakan berbasis sumber daya terkait. Jika ingin menghapus kebijakan ini, Anda harus melakukannya secara manual.

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

1. Pilih nama fungsi.

1. Pilih tab **Konfigurasi**, lalu pilih **URL Fungsi**.

1. Pilih **Hapus**.

1. Masukkan kata *hapus* ke dalam bidang untuk mengonfirmasi penghapusan.

1. Pilih **Hapus**.

**catatan**  
Saat Anda menghapus fungsi yang memiliki URL fungsi, Lambda menghapus URL fungsi secara asinkron. Jika Anda segera membuat fungsi baru dengan nama yang sama di akun yang sama, ada kemungkinan URL fungsi asli akan dipetakan ke fungsi baru alih-alih dihapus.

# Kontrol akses ke fungsi Lambda URLs
<a name="urls-auth"></a>

**catatan**  
Mulai Oktober 2025, fungsi baru URLs akan membutuhkan keduanya `lambda:InvokeFunctionUrl` dan `lambda:InvokeFunction` izin.

Anda dapat mengontrol akses ke fungsi Lambda URLs menggunakan [AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-AuthType)parameter yang dikombinasikan dengan [kebijakan berbasis sumber daya yang dilampirkan ke fungsi spesifik](access-control-resource-based.md) Anda. Konfigurasi kedua komponen ini menentukan siapa yang dapat memanggil atau melakukan tindakan administratif lainnya pada URL fungsi Anda.

`AuthType`Parameter menentukan cara Lambda mengautentikasi atau mengotorisasi permintaan ke URL fungsi Anda. Saat Anda mengonfigurasi URL fungsi Anda, Anda harus menentukan salah satu `AuthType` opsi berikut:
+ `AWS_IAM`— Lambda menggunakan AWS Identity and Access Management (IAM) untuk mengautentikasi dan mengotorisasi permintaan berdasarkan kebijakan identitas kepala sekolah IAM dan kebijakan berbasis sumber daya fungsi. Pilih opsi ini jika Anda hanya ingin pengguna dan peran yang diautentikasi untuk memanggil fungsi Anda menggunakan URL fungsi.
+ `NONE`— Lambda tidak melakukan otentikasi apa pun sebelum menjalankan fungsi Anda. Namun, kebijakan berbasis sumber daya fungsi Anda selalu berlaku dan harus memberikan akses publik sebelum URL fungsi Anda dapat menerima permintaan. Pilih opsi ini untuk mengizinkan akses publik yang tidak diautentikasi ke URL fungsi Anda.

Untuk wawasan tambahan tentang keamanan, Anda dapat menggunakan AWS Identity and Access Management Access Analyzer untuk mendapatkan analisis komprehensif tentang akses eksternal ke URL fungsi Anda. IAM Access Analyzer juga memantau izin baru atau yang diperbarui pada fungsi Lambda Anda untuk membantu Anda mengidentifikasi izin yang memberikan akses publik dan lintas akun. Anda dapat menggunakan IAM Access Analyzer tanpa biaya. Untuk memulai dengan IAM Access Analyzer, lihat [Menggunakan AWS IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) Access Analyzer.

Halaman ini berisi contoh kebijakan berbasis sumber daya untuk kedua jenis autentikasi, dan cara membuat kebijakan ini menggunakan [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html)operasi API atau konsol Lambda. Untuk informasi tentang cara memanggil URL fungsi setelah menyiapkan izin, lihat. [Memanggil fungsi Lambda URLs](urls-invocation.md)

**Topics**
+ [

## Menggunakan tipe `AWS_IAM` autentikasi
](#urls-auth-iam)
+ [

## Menggunakan tipe `NONE` autentikasi
](#urls-auth-none)
+ [

## Tata kelola dan kontrol akses
](#urls-governance)

## Menggunakan tipe `AWS_IAM` autentikasi
<a name="urls-auth-iam"></a>

Jika Anda memilih jenis `AWS_IAM` autentikasi, pengguna yang perlu memanggil URL fungsi Lambda Anda harus memiliki izin dan. `lambda:InvokeFunctionUrl` `lambda:InvokeFunction` [Bergantung pada siapa yang membuat permintaan pemanggilan, Anda mungkin harus memberikan izin ini menggunakan kebijakan berbasis sumber daya.](access-control-resource-based.md)

**Jika prinsipal yang membuat permintaan Akun AWS sama dengan URL fungsi, maka prinsipal harus memiliki `lambda:InvokeFunctionUrl` dan `lambda:InvokeFunction` izin dalam kebijakan [berbasis identitas mereka, **atau** memiliki izin yang diberikan kepada mereka dalam kebijakan berbasis](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) sumber daya fungsi.** Dengan kata lain, kebijakan berbasis sumber daya bersifat opsional jika pengguna sudah memiliki `lambda:InvokeFunctionUrl` dan `lambda:InvokeFunction` izin dalam kebijakan berbasis identitas mereka. Evaluasi kebijakan mengikuti aturan yang diuraikan dalam [logika evaluasi kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).

****Jika prinsipal yang membuat permintaan berada di akun yang berbeda, maka prinsipal harus memiliki kebijakan berbasis identitas yang memberi mereka `lambda:InvokeFunctionUrl` dan izin serta `lambda:InvokeFunction` izin yang diberikan kepada mereka dalam kebijakan berbasis sumber daya pada fungsi yang mereka coba panggil.**** Evaluasi kebijakan mengikuti aturan yang diuraikan dalam [Menentukan apakah permintaan lintas akun diperbolehkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account).

Kebijakan berbasis sumber daya berikut memungkinkan `example` peran Akun AWS `444455556666` untuk memanggil URL fungsi yang terkait dengan fungsi. `my-function` Kunci InvokedViaFunctionUrl konteks [lambda:](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) membatasi `lambda:InvokeFunction` tindakan untuk berfungsi panggilan URL. Ini berarti bahwa prinsipal harus menggunakan URL fungsi untuk memanggil fungsi. Jika Anda tidak menyertakan`lambda:InvokedViaFunctionUrl`, prinsipal dapat memanggil fungsi Anda melalui metode pemanggilan lainnya, selain URL fungsi.

**Example — Kebijakan berbasis sumber daya lintas akun**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "AWS_IAM"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

Anda dapat membuat kebijakan berbasis sumber daya ini melalui konsol menggunakan langkah-langkah berikut:

**Untuk memberikan izin pemanggilan URL ke akun lain (konsol)**

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

1. Pilih nama fungsi yang ingin Anda berikan izin pemanggilan URL.

1. Pilih tab **Konfigurasi**, lalu pilih **Izin**.

1. **Di bawah **Kebijakan berbasis sumber daya**, pilih Tambahkan izin.**

1. Pilih **URL Fungsi**.

1. Untuk **jenis Auth**, pilih **AWS\$1IAM**.

1. Masukkan **ID Pernyataan** untuk pernyataan kebijakan Anda.

1. Untuk **Principal**, masukkan ID akun atau Nama Sumber Daya Amazon (ARN) pengguna atau peran yang ingin Anda berikan izin. Sebagai contoh: **444455556666**.

1. Pilih **Simpan**.

Atau, Anda dapat membuat kebijakan ini menggunakan perintah [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) AWS Command Line Interface (AWS CLI) berikut. Saat Anda menggunakan AWS CLI, Anda harus menambahkan `lambda:InvokeFunction` pernyataan `lambda:InvokeFunctionUrl` dan secara terpisah. Contoh:

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal 444455556666 \
  --function-url-auth-type AWS_IAM
```

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal 444455556666 \
  --invoked-via-function-url
```

## Menggunakan tipe `NONE` autentikasi
<a name="urls-auth-none"></a>

**penting**  
Ketika jenis autentikasi URL fungsi Anda `NONE` dan Anda memiliki [kebijakan berbasis sumber daya](access-control-resource-based.md) yang memberikan akses publik, setiap pengguna yang tidak diautentikasi dengan URL fungsi Anda dapat memanggil fungsi Anda.

Dalam beberapa kasus, Anda mungkin ingin URL fungsi Anda menjadi publik. Misalnya, Anda mungkin ingin menyajikan permintaan yang dibuat langsung dari browser web. Untuk mengizinkan akses publik ke URL fungsi Anda, pilih jenis `NONE` autentikasi.

Jika Anda memilih jenis `NONE` autentikasi, Lambda tidak menggunakan IAM untuk mengautentikasi permintaan ke URL fungsi Anda. Namun, fungsi Anda harus memiliki kebijakan berbasis sumber daya yang memungkinkan dan. `lambda:InvokeFunctionUrl` `lambda:InvokeFunction` Saat Anda membuat URL fungsi dengan jenis autentikasi `NONE` menggunakan konsol atau AWS Serverless Application Model (AWS SAM), Lambda secara otomatis membuat kebijakan berbasis sumber daya untuk Anda. Jika Anda menggunakan AWS CLI, AWS CloudFormation, atau Lambda API secara langsung, Anda harus [menambahkan sendiri kebijakan tersebut](#policy-cli).

Sebaiknya sertakan kunci InvokedViaFunctionUrl konteks [lambda:](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) dalam kebijakan berbasis sumber daya saat menggunakan jenis autentikasi. `NONE` Kunci konteks ini memastikan bahwa fungsi hanya dapat dipanggil melalui URL fungsi dan tidak melalui metode pemanggilan lainnya.

Perhatikan hal berikut tentang kebijakan ini:
+ Semua entitas dapat memanggil `lambda:InvokeFunctionUrl` dan`lambda:InvokeFunction`. Ini berarti bahwa siapa pun yang memiliki URL fungsi Anda dapat memanggil fungsi Anda.
+ Nilai kunci `lambda:FunctionUrlAuthType` kondisi adalah`NONE`. Ini berarti bahwa pernyataan kebijakan mengizinkan akses hanya jika jenis autentikasi URL fungsi Anda juga`NONE`.
+ `lambda:InvokedViaFunctionUrl`Kondisi ini memastikan bahwa fungsi hanya dapat dipanggil melalui URL fungsi dan tidak melalui metode pemanggilan lainnya.

**Example — Kebijakan berbasis sumber daya default untuk jenis autentikasi NONE**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    },
    {
      "Sid": "FunctionURLInvokeAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

**Buat kebijakan berbasis sumber daya menggunakan AWS CLI**  
Kecuali Anda menggunakan konsol atau AWS SAM untuk membuat URL fungsi dengan jenis autentikasi`NONE`, Anda harus menambahkan sendiri kebijakan berbasis sumber daya. Gunakan perintah berikut untuk membuat pernyataan untuk `lambda:InvokeFunctionUrl` dan `lambda:InvokeFunction` izin. Setiap pernyataan harus ditambahkan dalam perintah terpisah.

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal * \
  --function-url-auth-type NONE
```

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal * \
  --invoked-via-function-url
```

**catatan**  
Jika Anda menghapus URL fungsi dengan jenis autentikasi`NONE`, Lambda tidak secara otomatis menghapus kebijakan berbasis sumber daya terkait. Jika ingin menghapus kebijakan ini, Anda harus melakukannya secara manual.

Jika kebijakan berbasis sumber daya fungsi tidak memberikan `lambda:invokeFunctionUrl` dan `lambda:InvokeFunction` izin, pengguna akan mendapatkan kode kesalahan 403 Forbidden saat mereka mencoba memanggil URL fungsi Anda. Ini akan terjadi bahkan jika URL fungsi menggunakan jenis `NONE` autentikasi.

## Tata kelola dan kontrol akses
<a name="urls-governance"></a>

Selain izin pemanggilan URL fungsi, Anda juga dapat mengontrol akses pada tindakan yang digunakan untuk mengonfigurasi fungsi. URLs Lambda mendukung tindakan kebijakan IAM berikut untuk fungsi: URLs
+ `lambda:InvokeFunctionUrl`— Memanggil fungsi Lambda menggunakan URL fungsi.
+ `lambda:CreateFunctionUrlConfig`— Buat URL fungsi dan atur`AuthType`.
+ `lambda:UpdateFunctionUrlConfig`— Perbarui konfigurasi URL fungsi dan nya`AuthType`.
+ `lambda:GetFunctionUrlConfig`— Lihat detail URL fungsi.
+ `lambda:ListFunctionUrlConfigs`— Daftar konfigurasi URL fungsi.
+ `lambda:DeleteFunctionUrlConfig`— Hapus URL fungsi.

Untuk mengizinkan atau menolak akses URL fungsi ke AWS entitas lain, sertakan tindakan ini dalam kebijakan IAM. Misalnya, kebijakan berikut memberikan `example` peran dalam Akun AWS `444455556666` izin untuk memperbarui URL fungsi untuk fungsi **my-function** di akun. `123456789012`

**Example kebijakan URL fungsi lintas akun**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action": "lambda:UpdateFunctionUrlConfig",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function"
        }
    ]
}
```

### Kunci syarat
<a name="urls-condition-keys"></a>

Untuk kontrol akses berbutir halus atas fungsi Anda URLs, gunakan tombol konteks kondisi. Lambda mendukung tombol konteks berikut untuk fungsi: URLs
+ `lambda:FunctionUrlAuthType`— Mendefinisikan nilai enum yang menjelaskan jenis autentikasi yang digunakan URL fungsi Anda. Nilai dapat berupa `AWS_IAM` atau `NONE`, salah satu.
+ `lambda:InvokedViaFunctionUrl`— Membatasi `lambda:InvokeFunction` tindakan untuk panggilan yang dilakukan melalui URL fungsi. Ini memastikan bahwa fungsi hanya dapat dipanggil menggunakan URL fungsi dan tidak melalui metode pemanggilan lainnya. Untuk contoh kebijakan berbasis sumber daya yang menggunakan kunci `lambda:InvokedViaFunctionUrl` konteks, lihat contoh di dan. [Menggunakan tipe `AWS_IAM` autentikasi](#urls-auth-iam) [Menggunakan tipe `NONE` autentikasi](#urls-auth-none)

Anda dapat menggunakan kunci konteks ini dalam kebijakan yang terkait dengan fungsi Anda. Misalnya, Anda mungkin ingin membatasi siapa yang dapat membuat perubahan konfigurasi pada fungsi URLs Anda. Untuk menolak semua `UpdateFunctionUrlConfig` permintaan ke fungsi apa pun dengan jenis autentikasi URL`NONE`, Anda dapat menentukan kebijakan berikut:

**Example kebijakan URL fungsi dengan penolakan eksplisit**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action":[
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "NONE"
                }
            }
        }
    ]
}
```

Untuk memberikan `example` peran dalam Akun AWS `444455556666` izin untuk membuat `CreateFunctionUrlConfig` dan `UpdateFunctionUrlConfig` permintaan pada fungsi dengan jenis autentikasi URL`AWS_IAM`, Anda dapat menentukan kebijakan berikut:

**Example kebijakan URL fungsi dengan izin eksplisit**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

Anda juga dapat menggunakan kunci kondisi ini dalam [kebijakan kontrol layanan](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP). Gunakan SCPs untuk mengelola izin di seluruh organisasi di AWS Organizations. Misalnya, untuk menolak pengguna membuat atau memperbarui fungsi URLs yang menggunakan apa pun selain jenis `AWS_IAM` autentikasi, gunakan kebijakan kontrol layanan berikut:

**Example fungsi URL SCP dengan penolakan eksplisit**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:*:123456789012:function:*",
            "Condition": {
                "StringNotEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

# Memanggil fungsi Lambda URLs
<a name="urls-invocation"></a>

URL fungsi adalah titik akhir HTTP (S) khusus untuk fungsi Lambda Anda. Anda dapat membuat dan mengonfigurasi URL fungsi melalui konsol Lambda atau API Lambda.

**Tip**  
Lambda menawarkan dua cara untuk menjalankan fungsi Anda melalui titik akhir HTTP: fungsi dan Amazon API URLs Gateway. Jika Anda tidak yakin metode mana yang terbaik untuk kasus penggunaan Anda, lihat[Pilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP](furls-http-invoke-decision.md).

Saat Anda membuat URL fungsi, Lambda secara otomatis menghasilkan titik akhir URL unik untuk Anda. Setelah Anda membuat URL fungsi, titik akhir URL-nya tidak pernah berubah. Fungsi titik akhir URL memiliki format berikut:

```
https://<url-id>.lambda-url.<region>.on.aws
```

**catatan**  
Fungsi tidak URLs didukung sebagai berikut Wilayah AWS: Asia Pasifik (Hyderabad) (), Asia Pasifik (Melbourne`ap-south-2`) (), Asia Pasifik (Malaysia`ap-southeast-4`) (), Asia Pasifik (Selandia Baru`ap-southeast-5`) (), Asia Pasifik (Thailand`ap-southeast-6`) (), Asia Pasifik (Taipei`ap-southeast-7`) (), Kanada Barat (Calgary) ()`ap-east-2`, Eropa (Spanyol) ()`ca-west-1`, Eropa (Zurich) (`eu-south-2`), Israel (Tel Aviv) ()`eu-central-2`, dan Timur Tengah (UEA) (`il-central-1`). `me-central-1`

Fungsi URLs diaktifkan tumpukan ganda, mendukung dan. IPv4 IPv6 Setelah mengkonfigurasi URL fungsi Anda, Anda dapat memanggil fungsi Anda melalui titik akhir HTTP (S) melalui browser web, curl, Postman, atau klien HTTP apa pun. Untuk memanggil URL fungsi, Anda harus memiliki `lambda:InvokeFunctionUrl` dan `lambda:InvokeFunction` izin. Untuk informasi selengkapnya, lihat [Kontrol akses](urls-auth.md).

**Topics**
+ [

## Dasar-dasar pemanggilan URL fungsi
](#urls-invocation-basics)
+ [

## Muatan permintaan dan respons
](#urls-payloads)

## Dasar-dasar pemanggilan URL fungsi
<a name="urls-invocation-basics"></a>

Jika URL fungsi Anda menggunakan jenis `AWS_IAM` autentikasi, Anda harus menandatangani setiap permintaan HTTP menggunakan [AWS Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). Alat seperti [Postman](https://quickstarts.postman.com/guide/aws/index.html?index=..%2F..index#2) menawarkan cara bawaan untuk menandatangani permintaan Anda dengan SiGv4.

Jika Anda tidak menggunakan alat untuk menandatangani permintaan HTTP ke URL fungsi Anda, Anda harus menandatangani setiap permintaan secara manual menggunakan SigV4. Saat URL fungsi Anda menerima permintaan, Lambda juga menghitung tanda tangan SigV4. Lambda memproses permintaan hanya jika tanda tangan cocok. *Untuk petunjuk tentang cara menandatangani permintaan Anda secara manual dengan SigV4, lihat [Menandatangani AWS permintaan dengan Tanda Tangan Versi 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html) di Referensi Umum Amazon Web Services Panduan.*

Jika URL fungsi Anda menggunakan jenis `NONE` autentikasi, Anda tidak perlu menandatangani permintaan menggunakan SigV4. Anda dapat menjalankan fungsi Anda menggunakan browser web, curl, Postman, atau klien HTTP apa pun.

Untuk menguji `GET` permintaan sederhana ke fungsi Anda, gunakan browser web. Misalnya, jika URL fungsi Anda`https://abcdefg.lambda-url.us-east-1.on.aws`, dan dibutuhkan dalam parameter string`message`, URL permintaan Anda bisa terlihat seperti ini:

```
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
```

Untuk menguji permintaan HTTP lainnya, seperti `POST` permintaan, Anda dapat menggunakan alat seperti curl. Misalnya, jika Anda ingin menyertakan beberapa data JSON dalam `POST` permintaan ke URL fungsi Anda, Anda dapat menggunakan perintah curl berikut:

```
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \
-H 'content-type: application/json' \
-d '{ "example": "test" }'
```

## Muatan permintaan dan respons
<a name="urls-payloads"></a>

Saat klien memanggil URL fungsi Anda, Lambda memetakan permintaan ke objek peristiwa sebelum meneruskannya ke fungsi Anda. Respons fungsi Anda kemudian dipetakan ke respons HTTP yang dikirim Lambda kembali ke klien melalui URL fungsi.

Format peristiwa permintaan dan respons mengikuti skema yang sama dengan format [payload Amazon API Gateway versi 2.0](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).

### Minta format muatan
<a name="urls-request-payload"></a>

Muatan permintaan memiliki struktur sebagai berikut:

```
{
  "version": "2.0",
  "routeKey": "$default",
  "rawPath": "/my/path",
  "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
  "cookies": [
    "cookie1",
    "cookie2"
  ],
  "headers": {
    "header1": "value1",
    "header2": "value1,value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "<urlid>",
    "authentication": null,
    "authorizer": {
        "iam": {
                "accessKey": "AKIA...",
                "accountId": "111122223333",
                "callerId": "AIDA...",
                "cognitoIdentity": null,
                "principalOrgId": null,
                "userArn": "arn:aws:iam::111122223333:user/example-user",
                "userId": "AIDA..."
        }
    },
    "domainName": "<url-id>.lambda-url.us-west-2.on.aws",
    "domainPrefix": "<url-id>",
    "http": {
      "method": "POST",
      "path": "/my/path",
      "protocol": "HTTP/1.1",
      "sourceIp": "123.123.123.123",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "body": "Hello from client!",
  "pathParameters": null,
  "isBase64Encoded": false,
  "stageVariables": null
}
```


| Parameter | Deskripsi | Contoh | 
| --- | --- | --- | 
|  `version`  |  Versi format payload untuk acara ini. Fungsi Lambda URLs saat ini mendukung [format payload versi 2.0](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).  |  `2.0`  | 
|  `routeKey`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menetapkan ini `$default` sebagai placeholder.  |  `$default`  | 
|  `rawPath`  |  Jalur permintaan. Misalnya, jika URL permintaan adalah`https://{url-id}.lambda-url.{region}.on.aws/example/test/demo`, maka nilai jalur mentah adalah`/example/test/demo`.  |  `/example/test/demo`  | 
|  `rawQueryString`  |  String mentah yang berisi parameter string query permintaan. Karakter yang didukung termasuk `a-z``A-Z`,`0-9`,`.`,`_`,`-`,`%`,,`&`,`=`, dan`+`.  |  `"?parameter1=value1&parameter2=value2"`  | 
|  `cookies`  |  Array yang berisi semua cookie yang dikirim sebagai bagian dari permintaan.  |  `["Cookie_1=Value_1", "Cookie_2=Value_2"]`  | 
|  `headers`  |  Daftar header permintaan, disajikan sebagai pasangan kunci-nilai.  |  `{"header1": "value1", "header2": "value2"}`  | 
|  `queryStringParameters`  |  Parameter kueri untuk permintaan. Misalnya, jika URL permintaan adalah`https://{url-id}.lambda-url.{region}.on.aws/example?name=Jane`, maka `queryStringParameters` nilainya adalah objek JSON dengan kunci `name` dan nilai. `Jane`  |  `{"name": "Jane"}`  | 
|  `requestContext`  |  Objek yang berisi informasi tambahan tentang permintaan, seperti`requestId`, waktu permintaan, dan identitas penelepon jika diotorisasi melalui AWS Identity and Access Management (IAM).  |   | 
|  `requestContext.accountId`  |   Akun AWS ID pemilik fungsi.  |  `"123456789012"`  | 
|  `requestContext.apiId`  |  ID URL fungsi.  |  `"33anwqw8fj"`  | 
|  `requestContext.authentication`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda mengatur ini ke. `null`  |  `null`  | 
|  `requestContext.authorizer`  |  Objek yang berisi informasi tentang identitas pemanggil, jika URL fungsi menggunakan jenis `AWS_IAM` autentikasi. Jika tidak, Lambda menyetel ini ke. `null`  |   | 
|  `requestContext.authorizer.iam.accessKey`  |  Kunci akses identitas penelepon.  |  `"AKIAIOSFODNN7EXAMPLE"`  | 
|  `requestContext.authorizer.iam.accountId`  |   Akun AWS ID identitas penelepon.  |  `"111122223333"`  | 
|  `requestContext.authorizer.iam.callerId`  |  ID (ID pengguna) pemanggil.  |  `"AIDACKCEVSQ6C2EXAMPLE"`  | 
|  `requestContext.authorizer.iam.cognitoIdentity`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menyetel ini ke `null` atau mengecualikan ini dari JSON.  |  `null`  | 
|  `requestContext.authorizer.iam.principalOrgId`  |  ID organisasi utama yang terkait dengan identitas penelepon.  |  `"AIDACKCEVSQORGEXAMPLE"`  | 
|  `requestContext.authorizer.iam.userArn`  |  Nama Sumber Daya Amazon (ARN) pengguna dari identitas penelepon.  |  `"arn:aws:iam::111122223333:user/example-user"`  | 
|  `requestContext.authorizer.iam.userId`  |  ID pengguna dari identitas pemanggil.  |  `"AIDACOSFODNN7EXAMPLE2"`  | 
|  `requestContext.domainName`  |  Nama domain dari URL fungsi.  |  `"<url-id>.lambda-url.us-west-2.on.aws"`  | 
|  `requestContext.domainPrefix`  |  Awalan domain dari URL fungsi.  |  `"<url-id>"`  | 
|  `requestContext.http`  |  Objek yang berisi rincian tentang permintaan HTTP.  |   | 
|  `requestContext.http.method`  |  Metode HTTP yang digunakan dalam permintaan ini. Nilai yang valid termasuk `GET`, `POST`, `PUT`, `HEAD`, `OPTIONS`, `PATCH`, dan `DELETE`.  |  `GET`  | 
|  `requestContext.http.path`  |  Jalur permintaan. Misalnya, jika URL permintaan adalah`https://{url-id}.lambda-url.{region}.on.aws/example/test/demo`, maka nilai jalurnya adalah`/example/test/demo`.  |  `/example/test/demo`  | 
|  `requestContext.http.protocol`  |  Protokol permintaan.  |  `HTTP/1.1`  | 
|  `requestContext.http.sourceIp`  |  Alamat IP sumber dari koneksi TCP langsung membuat permintaan.  |  `123.123.123.123`  | 
|  `requestContext.http.userAgent`  |  Nilai header permintaan User-Agent.  |  `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Gecko/20100101 Firefox/42.0`  | 
|  `requestContext.requestId`  |  ID permintaan pemanggilan. Anda dapat menggunakan ID ini untuk melacak log pemanggilan yang terkait dengan fungsi Anda.  |  `e1506fd5-9e7b-434f-bd42-4f8fa224b599`  | 
|  `requestContext.routeKey`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menetapkan ini `$default` sebagai placeholder.  |  `$default`  | 
|  `requestContext.stage`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menetapkan ini `$default` sebagai placeholder.  |  `$default`  | 
|  `requestContext.time`  |  Stempel waktu permintaan.  |  `"07/Sep/2021:22:50:22 +0000"`  | 
|  `requestContext.timeEpoch`  |  Stempel waktu permintaan, dalam waktu zaman Unix.  |  `"1631055022677"`  | 
|  `body`  |  Tubuh permintaan. Jika jenis konten permintaan adalah biner, isi dikodekan base64.  |  `{"key1": "value1", "key2": "value2"}`  | 
|  `pathParameters`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menyetel ini ke `null` atau mengecualikan ini dari JSON.  |  `null`  | 
|  `isBase64Encoded`  |  `TRUE`jika tubuh adalah muatan biner dan dikodekan base64. `FALSE`jika tidak.  |  `FALSE`  | 
|  `stageVariables`  |  Fungsi URLs tidak menggunakan parameter ini. Lambda menyetel ini ke `null` atau mengecualikan ini dari JSON.  |  `null`  | 

### Format payload respon
<a name="urls-response-payload"></a>

Saat fungsi Anda mengembalikan respons, Lambda mem-parsing respons dan mengubahnya menjadi respons HTTP. Muatan respons fungsi memiliki format berikut:

```
{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": "{ \"message\": \"Hello, world!\" }",
    "cookies": [
        "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",
        "Cookie_2=Value2; Max-Age=78000"
    ],
    "isBase64Encoded": false
}
```

Lambda menyimpulkan format respons untuk Anda. Jika fungsi Anda mengembalikan JSON yang valid dan tidak mengembalikan a`statusCode`, Lambda mengasumsikan hal berikut:
+ `statusCode` adalah `200`.
**catatan**  
Yang valid `statusCode` berada dalam kisaran 100 hingga 599.
+ `content-type` adalah `application/json`.
+ `body`adalah respon fungsi.
+ `isBase64Encoded` adalah `false`.

Contoh berikut menunjukkan bagaimana output fungsi Lambda Anda memetakan ke payload respons, dan bagaimana payload respons memetakan ke respons HTTP akhir. Saat klien memanggil URL fungsi Anda, mereka melihat respons HTTP.

**Contoh output untuk respon string**


| Keluaran fungsi Lambda | Output respons yang ditafsirkan | Respons HTTP (apa yang dilihat klien) | 
| --- | --- | --- | 
|  <pre>"Hello, world!"</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": "Hello, world!",<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 15<br /><br />"Hello, world!"</pre>  | 

**Contoh keluaran untuk respons JSON**


| Keluaran fungsi Lambda | Output respons yang ditafsirkan | Respons HTTP (apa yang dilihat klien) | 
| --- | --- | --- | 
|  <pre>{<br />  "message": "Hello, world!"<br />}</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": {<br />    "message": "Hello, world!"<br />  },<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 34<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

**Contoh keluaran untuk respons kustom**


| Keluaran fungsi Lambda | Output respons yang ditafsirkan | Respons HTTP (apa yang dilihat klien) | 
| --- | --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

### Cookie
<a name="urls-cookies"></a>

Untuk mengembalikan cookie dari fungsi Anda, jangan menambahkan `set-cookie` header secara manual. Sebagai gantinya, sertakan cookie di objek payload respons Anda. Lambda secara otomatis menafsirkan ini dan menambahkannya sebagai `set-cookie` header dalam respons HTTP Anda, seperti pada contoh berikut.


| Keluaran fungsi Lambda | Respons HTTP (apa yang dilihat klien) | 
| --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "cookies": [<br />        "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",<br />        "Cookie_2=Value2; Max-Age=78000"<br />    ],<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br />set-cookie: Cookie_1=Value2; Expires=21 Oct 2021 07:48 GMT<br />set-cookie: Cookie_2=Value2; Max-Age=78000<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

# Memantau fungsi Lambda URLs
<a name="urls-monitoring"></a>

Anda dapat menggunakan AWS CloudTrail dan Amazon CloudWatch untuk memantau fungsi Anda URLs.

**Topics**
+ [

## Fungsi pemantauan URLs dengan CloudTrail
](#urls-cloudtrail)
+ [

## CloudWatch metrik untuk fungsi URLs
](#urls-cloudwatch)

## Fungsi pemantauan URLs dengan CloudTrail
<a name="urls-cloudtrail"></a>

Untuk fungsi URLs, Lambda secara otomatis mendukung pencatatan operasi API berikut sebagai peristiwa dalam file CloudTrail log:
+ [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)
+ [UpdateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionUrlConfig.html)
+ [DeleteFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionUrlConfig.html)
+ [GetFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionUrlConfig.html)
+ [ListFunctionUrlConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionUrlConfigs.html)

Setiap entri log berisi informasi tentang identitas penelepon, kapan permintaan dibuat, dan detail lainnya. Anda dapat melihat semua acara dalam 90 hari terakhir dengan melihat **riwayat CloudTrail Acara** Anda. Untuk menyimpan catatan 90 hari terakhir, Anda dapat membuat jejak.

Secara default, CloudTrail tidak mencatat `InvokeFunctionUrl` permintaan, yang dianggap peristiwa data. Namun, Anda dapat mengaktifkan login peristiwa data CloudTrail. Untuk informasi lebih lanjut, lihat [Peristiwa Pencatatan Data untuk Pelacakan](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) dalam *AWS CloudTrail Panduan Pengguna*.

## CloudWatch metrik untuk fungsi URLs
<a name="urls-cloudwatch"></a>

Lambda mengirimkan metrik agregat tentang permintaan URL fungsi ke. CloudWatch Dengan metrik ini, Anda dapat memantau fungsi URLs, membuat dasbor, dan mengonfigurasi alarm di konsol. CloudWatch 

Fungsi URLs mendukung metrik pemanggilan berikut. Kami merekomendasikan untuk melihat metrik ini dengan `Sum` statistik.
+ `UrlRequestCount`— Jumlah permintaan yang dibuat untuk URL fungsi ini.
+ `Url4xxCount`— Jumlah permintaan yang mengembalikan kode status HTTP 4XX. Kode seri 4XX menunjukkan kesalahan sisi klien, seperti permintaan buruk.
+ `Url5xxCount`— Jumlah permintaan yang mengembalikan kode status HTTP 5XX. Kode seri 5XX menunjukkan kesalahan sisi server, seperti kesalahan fungsi dan batas waktu.

Fungsi URLs juga mendukung metrik kinerja berikut. Kami merekomendasikan untuk melihat metrik ini dengan `Average` atau `Max` statistik.
+ `UrlRequestLatency`— Waktu antara ketika URL fungsi menerima permintaan dan ketika URL fungsi mengembalikan respons.

Masing-masing metrik pemanggilan dan kinerja ini mendukung dimensi berikut:
+ `FunctionName`— Lihat metrik agregat untuk fungsi yang URLs ditetapkan ke versi fungsi yang `$LATEST` tidak dipublikasikan, atau ke alias fungsi mana pun. Misalnya, `hello-world-function`.
+ `Resource`— Lihat metrik untuk URL fungsi tertentu. Ini didefinisikan oleh nama fungsi, bersama dengan versi fungsi yang `$LATEST` tidak dipublikasikan atau salah satu alias fungsi. Misalnya, `hello-world-function:$LATEST`.
+ `ExecutedVersion`— Lihat metrik untuk URL fungsi tertentu berdasarkan versi yang dieksekusi. Anda dapat menggunakan dimensi ini terutama untuk melacak URL fungsi yang ditetapkan ke versi yang `$LATEST` tidak dipublikasikan.

# Pilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP
<a name="furls-http-invoke-decision"></a>

Banyak kasus penggunaan umum untuk Lambda melibatkan pemanggilan fungsi Anda menggunakan permintaan HTTP. Misalnya, Anda mungkin ingin aplikasi web menjalankan fungsi Anda melalui permintaan browser. Fungsi Lambda juga dapat digunakan untuk membuat REST penuh APIs, menangani interaksi pengguna dari aplikasi seluler, memproses data dari layanan eksternal melalui panggilan HTTP, atau membuat webhook khusus.

Bagian berikut menjelaskan pilihan Anda untuk memanggil Lambda melalui HTTP dan memberikan informasi untuk membantu Anda membuat keputusan yang tepat untuk kasus penggunaan khusus Anda.

## Apa pilihan Anda saat memilih metode pemanggilan HTTP?
<a name="w2aac39c81c73b9"></a>

[Lambda menawarkan dua metode utama untuk memanggil fungsi menggunakan permintaan HTTP - [fungsi](urls-configuration.md) dan API URLs Gateway.](services-apigateway.md) Perbedaan utama antara kedua opsi ini adalah sebagai berikut:
+ **Fungsi Lambda URLs** menyediakan titik akhir HTTP langsung yang sederhana untuk fungsi Lambda. Mereka dioptimalkan untuk kesederhanaan dan efektivitas biaya dan menyediakan jalur tercepat untuk mengekspos fungsi Lambda melalui HTTP.
+ **API Gateway** adalah layanan yang lebih canggih untuk membangun fitur lengkap APIs. API Gateway dioptimalkan untuk membangun dan mengelola produksi dalam APIs skala besar dan menyediakan alat komprehensif untuk keamanan, pemantauan, dan manajemen lalu lintas.

## Rekomendasi jika Anda sudah mengetahui kebutuhan Anda
<a name="w2aac39c81c73c11"></a>

Jika Anda sudah jelas tentang kebutuhan Anda, berikut adalah rekomendasi dasar kami:

Kami merekomendasikan **[fungsi URLs](urls-configuration.md)** untuk aplikasi sederhana atau prototyping di mana Anda hanya memerlukan metode otentikasi dasar dan request/response penanganan dan di mana Anda ingin meminimalkan biaya dan kompleksitas.

**[API Gateway](services-apigateway.md)** adalah pilihan yang lebih baik untuk aplikasi produksi dalam skala besar atau untuk kasus di mana Anda memerlukan fitur yang lebih canggih seperti dukungan [OpenAPI Description](https://www.openapis.org/), pilihan opsi otentikasi, nama domain khusus, atau request/response penanganan kaya termasuk throttling, caching, dan transformasi. request/response 

## Apa yang harus dipertimbangkan saat memilih metode untuk menjalankan fungsi Lambda Anda
<a name="w2aac39c81c73c13"></a>

Saat memilih antara fungsi URLs dan API Gateway, Anda perlu mempertimbangkan faktor-faktor berikut:
+ Kebutuhan otentikasi Anda, seperti apakah Anda memerlukan OAuth atau Amazon Cognito untuk mengautentikasi pengguna
+ Persyaratan penskalaan Anda dan kompleksitas API yang ingin Anda terapkan
+ Apakah Anda memerlukan fitur canggih seperti validasi permintaan dan request/response pemformatan
+ Persyaratan pemantauan Anda
+ Sasaran biaya Anda

Dengan memahami faktor-faktor ini, Anda dapat memilih opsi yang paling menyeimbangkan persyaratan keamanan, kompleksitas, dan biaya Anda.

Informasi berikut merangkum perbedaan utama antara kedua opsi.

### Autentikasi
<a name="w2aac39c81c73c13c11b1"></a>
+ **Fungsi URLs** menyediakan opsi otentikasi dasar melalui AWS Identity and Access Management (IAM). Anda dapat mengonfigurasi titik akhir Anda menjadi publik (tidak ada otentikasi) atau memerlukan otentikasi IAM. Dengan autentikasi IAM, Anda dapat menggunakan AWS kredensi standar atau peran IAM untuk mengontrol akses. Meskipun mudah diatur, pendekatan ini memberikan opsi terbatas dibandingkan dengan metode otentikat lainnya.
+ **API Gateway** menyediakan akses ke berbagai opsi otentikasi yang lebih komprehensif. Selain autentikasi IAM, Anda dapat menggunakan [otorisasi Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (logika otentikasi khusus), kumpulan pengguna Amazon Cognito, dan [aliran.0](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html). OAuth2 Fleksibilitas ini memungkinkan Anda menerapkan skema otentikasi yang kompleks, termasuk penyedia otentikasi pihak ketiga, otentikasi berbasis token, dan otentikasi multi-faktor.

### Penanganan permintaan/tanggapan
<a name="w2aac39c81c73c13c11b3"></a>
+ **Fungsi URLs** menyediakan permintaan HTTP dasar dan penanganan respons. Mereka mendukung metode HTTP standar dan menyertakan dukungan berbagi sumber daya lintas asal (CORS) bawaan. Meskipun mereka dapat menangani muatan JSON dan parameter kueri secara alami, mereka tidak menawarkan transformasi permintaan atau kemampuan validasi. Penanganan respons sama mudahnya — klien menerima respons dari fungsi Lambda Anda persis seperti Lambda mengembalikannya.
+ **API Gateway** menyediakan kemampuan penanganan permintaan dan respons yang canggih. Anda dapat menentukan validator permintaan, mengubah permintaan dan tanggapan menggunakan templat pemetaan, menyiapkan request/response header, dan menerapkan cache respons. API Gateway juga mendukung payload biner dan nama domain khusus dan dapat memodifikasi tanggapan sebelum mencapai klien. Anda dapat mengatur model untuk request/response validasi dan transformasi menggunakan JSON Schema.

### Penskalaan
<a name="w2aac39c81c73c13c11b5"></a>
+  URLsSkala **fungsi** secara langsung dengan batas konkurensi fungsi Lambda Anda dan tangani lonjakan lalu lintas dengan meningkatkan fungsi Anda hingga batas konkurensi maksimum yang dikonfigurasi. Setelah batas itu tercapai, Lambda merespons permintaan tambahan dengan respons HTTP 429. Tidak ada mekanisme antrian bawaan, jadi penanganan penskalaan sepenuhnya bergantung pada konfigurasi fungsi Lambda Anda. Secara default, fungsi Lambda memiliki batas 1.000 eksekusi bersamaan per. Wilayah AWS
+ **API Gateway** menyediakan kemampuan penskalaan tambahan di atas penskalaan Lambda sendiri. Ini termasuk kontrol antrian permintaan dan pelambatan bawaan, memungkinkan Anda mengelola lonjakan lalu lintas dengan lebih anggun. API Gateway dapat menangani hingga 10.000 permintaan per detik per wilayah secara default, dengan kapasitas burst 5.000 permintaan per detik. Ini juga menyediakan alat untuk membatasi permintaan pada tingkat yang berbeda (API, panggung, atau metode) untuk melindungi backend Anda.

### Memantau
<a name="w2aac39c81c73c13c11b7"></a>
+ **Fungsi URLs** menawarkan pemantauan dasar melalui CloudWatch metrik Amazon, termasuk jumlah permintaan, latensi, dan tingkat kesalahan. Anda mendapatkan akses ke metrik dan log Lambda standar, yang menunjukkan permintaan mentah yang masuk ke fungsi Anda. Meskipun ini memberikan visibilitas operasional yang penting, metrik difokuskan terutama pada eksekusi fungsi.
+ **API Gateway** menyediakan kemampuan pemantauan komprehensif termasuk metrik terperinci, pencatatan, dan opsi penelusuran. Anda dapat memantau panggilan API, latensi, tingkat kesalahan, dan hit/miss tingkat cache melalui CloudWatch. API Gateway juga terintegrasi dengan AWS X-Ray untuk penelusuran terdistribusi dan menyediakan format logging yang dapat disesuaikan.

### Biaya
<a name="w2aac39c81c73c13c11b9"></a>
+ **Fungsi URLs** mengikuti model penetapan harga Lambda standar — Anda hanya membayar untuk pemanggilan fungsi dan waktu komputasi. Tidak ada biaya tambahan untuk titik akhir URL itu sendiri. Ini menjadikannya pilihan hemat biaya untuk aplikasi sederhana APIs atau lalu lintas rendah jika Anda tidak memerlukan fitur tambahan API Gateway.
+ **API Gateway** menawarkan [tingkat gratis](https://aws.amazon.com/api-gateway/pricing/#Free_Tier) yang mencakup satu juta panggilan API yang diterima untuk REST APIs dan satu juta panggilan API yang diterima untuk HTTP APIs. Setelah ini, API Gateway mengenakan biaya untuk panggilan API, transfer data, dan caching (jika diaktifkan). Lihat [halaman harga](https://aws.amazon.com/api-gateway/pricing/) API Gateway untuk memahami biaya untuk kasus penggunaan Anda sendiri.

### Fitur lainnya
<a name="w2aac39c81c73c13c11c11"></a>
+ **Fungsi URLs** dirancang untuk kesederhanaan dan integrasi Lambda langsung. Mereka mendukung titik akhir HTTP dan HTTPS, menawarkan dukungan CORS bawaan, dan menyediakan titik akhir dual-stack (IPv4 dan). IPv6 Meskipun mereka tidak memiliki fitur canggih, mereka unggul dalam skenario di mana Anda memerlukan cara cepat dan mudah untuk mengekspos fungsi Lambda melalui HTTP.
+ **API Gateway** mencakup banyak fitur tambahan seperti versi API, manajemen tahap, kunci API untuk rencana penggunaan, dokumentasi API melalui Swagger/OpenAPI, WebSocket APIs privat dalam VPC, dan integrasi APIs WAF untuk keamanan tambahan. Ini juga mendukung penerapan kenari, integrasi tiruan untuk pengujian, dan integrasi dengan yang lain di luar Lambda. Layanan AWS 

## Pilih metode untuk menjalankan fungsi Lambda Anda
<a name="w2aac39c81c73c15"></a>

Sekarang setelah Anda membaca tentang kriteria untuk memilih antara fungsi Lambda URLs dan API Gateway dan perbedaan utama di antara keduanya, Anda dapat memilih opsi yang paling sesuai dengan kebutuhan Anda dan menggunakan sumber daya berikut untuk membantu Anda mulai menggunakannya.

------
#### [ Function URLs ]

**Memulai dengan fungsi URLs dengan sumber daya berikut**
+ Ikuti tutorial [Membuat fungsi Lambda dengan URL fungsi](urls-webhook-tutorial.md)
+ Pelajari lebih lanjut tentang fungsi URLs [Membuat dan mengelola fungsi Lambda URLs](urls-configuration.md) di bagian panduan ini
+ Coba tutorial yang dipandu dalam konsol **Buat aplikasi web sederhana** dengan melakukan hal berikut:

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

1. Buka panel bantuan dengan memilih ikon di sudut kanan atas layar.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/console_help_screenshot.png)

1. Pilih **Tutorial**.

1. Di **Buat aplikasi web sederhana**, pilih **Mulai tutorial**.

------
#### [ API Gateway ]

**Memulai Lambda dan API Gateway dengan sumber daya berikut**
+ Ikuti tutorial [Menggunakan Lambda dengan API Gateway untuk membuat REST API](services-apigateway-tutorial.md) yang terintegrasi dengan fungsi Lambda backend.
+ Pelajari selengkapnya tentang berbagai jenis API yang ditawarkan oleh API Gateway di bagian berikut dari *Panduan Pengembang Amazon API Gateway*:
  + [API Gateway REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html)
  + [API Gateway HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)
  + [API Gateway WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)
+ Coba satu atau beberapa contoh di bagian [Tutorial dan lokakarya](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-tutorials.html) dari *Panduan Pengembang Amazon API Gateway*.

------

# Tutorial: Membuat titik akhir webhook menggunakan URL fungsi Lambda
<a name="urls-webhook-tutorial"></a>

Dalam tutorial ini, Anda membuat URL fungsi Lambda untuk mengimplementasikan endpoint webhook. Webhook adalah komunikasi ringan yang digerakkan oleh peristiwa yang secara otomatis mengirimkan data antar aplikasi menggunakan HTTP. Anda dapat menggunakan webhook untuk menerima pembaruan langsung tentang peristiwa yang terjadi di sistem lain, seperti ketika pelanggan baru mendaftar di situs web, pembayaran diproses, atau file diunggah.

Dengan Lambda, webhook dapat diimplementasikan menggunakan fungsi Lambda atau API Gateway. URLs Fungsi URLs adalah pilihan yang baik untuk webhook sederhana yang tidak memerlukan fitur seperti otorisasi lanjutan atau validasi permintaan.

**Tip**  
Jika Anda tidak yakin solusi mana yang terbaik untuk kasus penggunaan khusus Anda, lihat[Pilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP](furls-http-invoke-decision.md).

## Prasyarat
<a name="urls-webhook-tutorial-prereqs"></a>

Untuk menyelesaikan tutorial ini, Anda harus memiliki Python (versi 3.8 atau yang lebih baru) atau Node.js (versi 18 atau lebih baru) diinstal pada mesin lokal Anda.

Untuk menguji titik akhir menggunakan permintaan HTTP, tutorial menggunakan [curl](https://curl.se/), alat baris perintah yang dapat Anda gunakan untuk mentransfer data menggunakan berbagai protokol jaringan. Lihat [dokumentasi curl](https://curl.se/docs/install.html) untuk mempelajari cara menginstal alat jika Anda belum memilikinya.

## Buat fungsi Lambda
<a name="urls-webhook-tutorial-function"></a>

Pertama buat fungsi Lambda yang berjalan ketika permintaan HTTP dikirim ke titik akhir webhook Anda. Dalam contoh ini, aplikasi pengiriman mengirimkan pembaruan setiap kali pembayaran dikirimkan dan menunjukkan di badan permintaan HTTP apakah pembayaran berhasil. Fungsi Lambda mem-parsing permintaan dan mengambil tindakan sesuai dengan status pembayaran. Dalam contoh ini, kode hanya mencetak ID pesanan untuk pembayaran, tetapi dalam aplikasi nyata, Anda dapat menambahkan pesanan ke database atau mengirim pemberitahuan.

Fungsi ini juga mengimplementasikan metode otentikasi yang paling umum digunakan untuk webhook, otentikasi pesan berbasis hash (HMAC). Dengan metode ini, aplikasi pengirim dan penerima berbagi kunci rahasia. Aplikasi pengiriman menggunakan algoritma hashing untuk menghasilkan tanda tangan unik menggunakan kunci ini bersama dengan konten pesan, dan menyertakan tanda tangan dalam permintaan webhook sebagai header HTTP. Aplikasi penerima kemudian mengulangi langkah ini, menghasilkan tanda tangan menggunakan kunci rahasia, dan membandingkan nilai yang dihasilkan dengan tanda tangan yang dikirim di header permintaan. Jika hasilnya cocok, permintaan dianggap sah. 

Buat fungsi menggunakan konsol Lambda dengan runtime Python atau Node.js.

------
#### [ Python ]

**Buat fungsi Lambda**

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

1. Buat fungsi dasar 'Hello world' dengan melakukan hal berikut:

   1. Pilih **Buat fungsi**.

   1. Pilih **Penulis dari awal**.

   1. Untuk **Nama fungsi**, masukkan **myLambdaWebhook**.

   1. Untuk **Runtime**, pilih **python3.14**.

   1. Pilih **Buat fungsi**.

1. Di panel **Sumber kode**, ganti kode yang ada dengan menyalin dan menempelkan berikut ini:

   ```
   import json
   import hmac
   import hashlib
   import os
   
   def lambda_handler(event, context):
       
       # Get the webhook secret from environment variables
       webhook_secret = os.environ['WEBHOOK_SECRET']
       
       # Verify the webhook signature
       if not verify_signature(event, webhook_secret):
           return {
               'statusCode': 401,
               'body': json.dumps({'error': 'Invalid signature'})
           }
       
       try:
           # Parse the webhook payload
           payload = json.loads(event['body'])
           
           # Handle different event types
           event_type = payload.get('type')
           
           if event_type == 'payment.success':
               # Handle successful payment
               order_id = payload.get('orderId')
               print(f"Processing successful payment for order {order_id}")
               
               # Add your business logic here
               # For example, update database, send notifications, etc.
               
           elif event_type == 'payment.failed':
               # Handle failed payment
               order_id = payload.get('orderId')
               print(f"Processing failed payment for order {order_id}")
               
               # Add your business logic here
               
           else:
               print(f"Received unhandled event type: {event_type}")
           
           # Return success response
           return {
               'statusCode': 200,
               'body': json.dumps({'received': True})
           }
           
       except json.JSONDecodeError:
           return {
               'statusCode': 400,
               'body': json.dumps({'error': 'Invalid JSON payload'})
           }
       except Exception as e:
           print(f"Error processing webhook: {e}")
           return {
               'statusCode': 500,
               'body': json.dumps({'error': 'Internal server error'})
           }
   
   def verify_signature(event, webhook_secret):
       """
       Verify the webhook signature using HMAC
       """
       try:
           # Get the signature from headers
           signature = event['headers'].get('x-webhook-signature')
   
           if not signature:
               print("Error: Missing webhook signature in headers")
               return False
           
           # Get the raw body (return an empty string if the body key doesn't exist)
           body = event.get('body', '')
           
           # Create HMAC using the secret key
           expected_signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
           
           # Compare the expected signature with the received signature to authenticate the message
           is_valid = hmac.compare_digest(signature, expected_signature)
           if not is_valid:
               print(f"Error: Invalid signature. Received: {signature}, Expected: {expected_signature}")
               return False
               
           return True
       except Exception as e:
           print(f"Error verifying signature: {e}")
           return False
   ```

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda.

------
#### [ Node.js ]

**Buat fungsi Lambda**

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

1. Buat fungsi dasar 'Hello world' dengan melakukan hal berikut:

   1. Pilih **Buat fungsi**.

   1. Pilih **Penulis dari awal**.

   1. Untuk **Nama fungsi**, masukkan **myLambdaWebhook**.

   1. Untuk **Runtime**, pilih **nodejs24.x**.

   1. Pilih **Buat fungsi**.

1. Di panel **Sumber kode**, ganti kode yang ada dengan menyalin dan menempelkan berikut ini:

   ```
   import crypto from 'crypto';
   
   export const handler = async (event, context) => {
       // Get the webhook secret from environment variables
       const webhookSecret = process.env.WEBHOOK_SECRET;
   
       // Verify the webhook signature
       if (!verifySignature(event, webhookSecret)) {
           return {
               statusCode: 401,
               body: JSON.stringify({ error: 'Invalid signature' })
           };
       }
   
       try {
           // Parse the webhook payload
           const payload = JSON.parse(event.body);
   
           // Handle different event types
           const eventType = payload.type;
   
           switch (eventType) {
               case 'payment.success': {
                   // Handle successful payment
                   const orderId = payload.orderId;
                   console.log(`Processing successful payment for order ${orderId}`);
   
                   // Add your business logic here
                   // For example, update database, send notifications, etc.
                   break;
               }
   
               case 'payment.failed': {
                   // Handle failed payment
                   const orderId = payload.orderId;
                   console.log(`Processing failed payment for order ${orderId}`);
   
                   // Add your business logic here
                   break;
               }
   
               default:
                   console.log(`Received unhandled event type: ${eventType}`);
           }
   
           // Return success response
           return {
               statusCode: 200,
               body: JSON.stringify({ received: true })
           };
   
       } catch (error) {
           if (error instanceof SyntaxError) {
               // Handle JSON parsing errors
               return {
                   statusCode: 400,
                   body: JSON.stringify({ error: 'Invalid JSON payload' })
               };
           }
   
           // Handle all other errors
           console.error('Error processing webhook:', error);
           return {
               statusCode: 500,
               body: JSON.stringify({ error: 'Internal server error' })
           };
       }
   };
   
   // Verify the webhook signature using HMAC
   
   const verifySignature = (event, webhookSecret) => {
       try {
           // Get the signature from headers
           const signature = event.headers['x-webhook-signature'];
     
           if (!signature) {
               console.log('No signature found in headers:', event.headers);
               return false;
           }
     
           // Get the raw body (return an empty string if the body key doesn't exist)
           const body = event.body || '';
     
           // Create HMAC using the secret key
           const hmac = crypto.createHmac('sha256', webhookSecret);
           const expectedSignature = hmac.update(body).digest('hex');
     
           // Compare expected and received signatures
           const isValid = signature === expectedSignature;
           if (!isValid) {
               console.log(`Invalid signature. Received: ${signature}, Expected: ${expectedSignature}`);
               return false;
           }
           
           return true;
       } catch (error) {
           console.error('Error during signature verification:', error);
           return false;
       }
     };
   ```

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda.

------

## Buat kunci rahasia
<a name="urls-webhook-tutorial-key"></a>

Untuk fungsi Lambda untuk mengotentikasi permintaan webhook, ia menggunakan kunci rahasia yang dibagikan dengan aplikasi panggilan. Dalam contoh ini, kunci disimpan dalam variabel lingkungan. Dalam aplikasi produksi, jangan sertakan informasi sensitif seperti kata sandi dalam kode fungsi Anda. Sebagai gantinya, [buat AWS Secrets Manager rahasia](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) dan kemudian [gunakan ekstensi AWS Parameter dan Rahasia Lambda](with-secrets-manager.md) untuk mengambil kredensil Anda di fungsi Lambda Anda.

**Buat dan simpan kunci rahasia webhook**

1. Hasilkan string acak yang panjang menggunakan generator nomor acak yang aman secara kriptografis. Anda dapat menggunakan cuplikan kode berikut dengan Python atau Node.js untuk menghasilkan dan mencetak rahasia 32 karakter, atau menggunakan metode pilihan Anda sendiri.

------
#### [ Python ]

**Example kode untuk menghasilkan rahasia**  

   ```
   import secrets
   webhook_secret = secrets.token_urlsafe(32)
   print(webhook_secret)
   ```

------
#### [ Node.js ]

**Example kode untuk menghasilkan rahasia (format modul ES)**  

   ```
   import crypto from 'crypto';
   let webhookSecret = crypto.randomBytes(32).toString('base64');
   console.log(webhookSecret)
   ```

------

1. Simpan string yang Anda hasilkan sebagai variabel lingkungan untuk fungsi Anda dengan melakukan hal berikut:

   1. Di tab **Konfigurasi** untuk fungsi Anda, pilih **variabel Lingkungan**.

   1. Pilih **Edit**.

   1. Pilih **Tambahkan variabel lingkungan**.

   1. Untuk **Kunci**, masukkan**WEBHOOK\$1SECRET**, lalu untuk **Nilai**, masukkan rahasia yang Anda buat di langkah sebelumnya.

   1. Pilih **Simpan**.

Anda harus menggunakan rahasia ini lagi nanti di tutorial untuk menguji fungsi Anda, jadi catat sekarang.

## Buat titik akhir URL fungsi
<a name="urls-webhook-tutorial-furl"></a>

Buat titik akhir untuk webhook Anda menggunakan URL fungsi Lambda. Karena Anda menggunakan jenis autentikasi `NONE` untuk membuat titik akhir dengan akses publik, siapa pun yang memiliki URL dapat memanggil fungsi Anda. Untuk mempelajari lebih lanjut tentang mengontrol akses ke fungsi URLs, lihat[Kontrol akses ke fungsi Lambda URLs](urls-auth.md). Jika Anda memerlukan opsi otentikasi lanjutan untuk webhook Anda, pertimbangkan untuk menggunakan API Gateway.

**Buat titik akhir URL fungsi**

1. Di tab **Konfigurasi** untuk fungsi Anda, pilih **URL Fungsi**.

1. Pilih **Buat URL fungsi**.

1. Untuk **jenis Auth**, pilih **NONE**.

1. Pilih **Simpan**.

Titik akhir untuk URL fungsi yang baru saja Anda buat ditampilkan di panel **URL Fungsi**. Salin titik akhir untuk digunakan nanti dalam tutorial.

## Uji fungsi di konsol
<a name="urls-webhook-tutorial-test-console"></a>

Sebelum menggunakan permintaan HTTP untuk menjalankan fungsi Anda menggunakan titik akhir URL, uji di konsol untuk mengonfirmasi kode Anda berfungsi seperti yang diharapkan.

Untuk memverifikasi fungsi di konsol, pertama-tama Anda menghitung tanda tangan webhook menggunakan rahasia yang Anda buat sebelumnya dalam tutorial dengan payload JSON pengujian berikut:

```
{
    "type": "payment.success", 
    "orderId": "1234",
    "amount": "99.99"
}
```

Gunakan salah satu contoh kode Python atau Node.js berikut untuk menghitung tanda tangan webhook menggunakan rahasia Anda sendiri.

------
#### [ Python ]

**Hitung tanda tangan webhook**

1. Simpan kode berikut sebagai file bernama`calculate_signature.py`. Ganti rahasia webhook dalam kode dengan nilai Anda sendiri.

   ```
   import secrets
   import hmac
   import json
   import hashlib
   
   webhook_secret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   
   body = json.dumps({"type": "payment.success", "orderId": "1234", "amount": "99.99"})
   
   signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
   
   print(signature)
   ```

1. Hitung tanda tangan dengan menjalankan perintah berikut dari direktori yang sama tempat Anda menyimpan kode. Salin tanda tangan output kode.

   ```
   python calculate_signature.py
   ```

------
#### [ Node.js ]

**Hitung tanda tangan webhook**

1. Simpan kode berikut sebagai file bernama`calculate_signature.mjs`. Ganti rahasia webhook dalam kode dengan nilai Anda sendiri.

   ```
   import crypto from 'crypto';
   
   const webhookSecret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   const body = "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}";
   
   let hmac = crypto.createHmac('sha256', webhookSecret);
   let signature = hmac.update(body).digest('hex');
   
   console.log(signature);
   ```

1. Hitung tanda tangan dengan menjalankan perintah berikut dari direktori yang sama tempat Anda menyimpan kode. Salin tanda tangan output kode.

   ```
   node calculate_signature.mjs
   ```

------

Anda sekarang dapat menguji kode fungsi Anda menggunakan permintaan HTTP pengujian di konsol.

**Uji fungsi di konsol**

1. Pilih tab **Kode** untuk fungsi Anda.

1. Di bagian **TEST EVENTS**, pilih **Create new test event**

1. Untuk **Nama Acara**, masukkan**myEvent**.

1. Ganti JSON yang ada dengan menyalin dan menempelkan berikut ini ke panel **Event** JSON. Ganti tanda tangan webhook dengan nilai yang Anda hitung pada langkah sebelumnya.

   ```
   {
     "headers": {
       "Content-Type": "application/json",
       "x-webhook-signature": "2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a"
     },
     "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}"
   }
   ```

1. Pilih **Simpan**.

1. Pilih **Panggil**.

   Anda akan melihat output yang serupa dengan yang berikut:

------
#### [ Python ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\": true}"
   }
   
   Function Logs:
   START RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6 Version: $LATEST
   Processing successful payment for order 1234
   END RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6
   REPORT RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6	Duration: 1.55 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 36 MB	Init Duration: 136.32 ms
   ```

------
#### [ Node.js ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\":true}"
   }
   
   Function Logs:
   START RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 Version: $LATEST
   2025-01-10T18:05:42.062Z	e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	INFO	Processing successful payment for order 1234
   END RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   REPORT RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	Duration: 60.10 ms	Billed Duration: 61 ms	Memory Size: 128 MB	Max Memory Used: 72 MB	Init Duration: 174.46 ms
   
   Request ID: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   ```

------

## Uji fungsi menggunakan permintaan HTTP
<a name="urls-webhook-tutorial-test-curl"></a>

Gunakan alat baris perintah curl untuk menguji titik akhir webhook Anda.

**Uji fungsi menggunakan permintaan HTTP**

1. Dalam program terminal atau shell, jalankan perintah curl berikut. Ganti URL dengan nilai untuk titik akhir URL fungsi Anda sendiri dan ganti tanda tangan webhook dengan tanda tangan yang Anda hitung menggunakan kunci rahasia Anda sendiri.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Anda akan melihat output berikut:

   ```
   {"received": true}
   ```

1. Periksa CloudWatch log untuk fungsi Anda untuk mengonfirmasinya mengurai muatan dengan benar dengan melakukan hal berikut:

   1. Buka halaman [grup Log](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups) di CloudWatch konsol Amazon.

   1. Pilih grup log fungsi Anda (`/aws/lambda/myLambdaWebhook`).

   1. Pilih aliran log yang terbaru.

      Anda akan melihat output yang mirip dengan yang berikut di log fungsi Anda:

------
#### [ Python ]

      ```
      Processing successful payment for order 1234
      ```

------
#### [ Node.js ]

      ```
      2025-01-10T18:05:42.062Z e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 INFO Processing successful payment for order 1234
      ```

------

1. Konfirmasikan bahwa kode Anda mendeteksi tanda tangan yang tidak valid dengan menjalankan perintah curl berikut. Ganti URL dengan titik akhir URL fungsi Anda sendiri.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: abcdefg" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Anda akan melihat output berikut:

   ```
   {"error": "Invalid signature"}
   ```

## Bersihkan sumber daya Anda
<a name="urls-webhook-tutorial-cleanup"></a>

Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.

**Untuk menghapus fungsi Lambda**

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

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.

Saat Anda membuat fungsi Lambda di konsol, Lambda juga membuat [peran eksekusi](lambda-intro-execution-role.md) untuk fungsi Anda.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang dibuat Lambda. Peran memiliki format nama`myLambdaWebhook-role-<random string>`.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.