

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

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