

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

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