Memanggil fungsi Lambda URLs - AWS Lambda

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

Memanggil fungsi Lambda URLs

Fungsi URL adalah titik akhir khusus HTTP (S) untuk fungsi Lambda Anda. Anda dapat membuat dan mengonfigurasi fungsi URL melalui konsol Lambda atau Lambda. API Saat Anda membuat fungsiURL, Lambda secara otomatis menghasilkan URL titik akhir yang unik untuk Anda. Setelah Anda membuat fungsiURL, URL titik akhirnya tidak pernah berubah. URLTitik akhir 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 (Melbourneap-south-2) (), Asia Pasifik (Malaysiaap-southeast-4) (), Kanada Barat (Calgaryap-southeast-5) (), Eropa (Spanyolca-west-1) (), Eropa (Zuricheu-south-2) (), Israel (Tel Aviveu-central-2) (), dan Timur Tengah (il-central-1) (). UAE me-central-1

Fungsi URLs adalah dual stack-enabled, mendukung dan. IPv4 IPv6 Setelah mengonfigurasi fungsi AndaURL, Anda dapat memanggil fungsi Anda melalui titik akhir HTTP (S) melalui browser web, curl, Postman, atau klien apa pun. HTTP Untuk menjalankan fungsiURL, Anda harus memiliki lambda:InvokeFunctionUrl izin. Untuk informasi selengkapnya, lihat Kontrol akses.

Dasar-dasar URL pemanggilan fungsi

Jika fungsi Anda URL menggunakan jenis AWS_IAM autentikasi, Anda harus menandatangani setiap HTTP permintaan menggunakan AWS Signature Version 4 (SigV4). Alat seperti awscurl, Postman, dan AWS SiGv4 Proxy menawarkan cara bawaan untuk menandatangani permintaan Anda dengan SiGv4.

Jika Anda tidak menggunakan alat untuk menandatangani HTTP permintaan ke fungsi AndaURL, Anda harus menandatangani setiap permintaan secara manual menggunakan SigV4. Saat fungsi Anda URL 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 di Referensi Umum Amazon Web Services Panduan.

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

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

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

Untuk menguji HTTP permintaan lain, seperti POST permintaan, Anda dapat menggunakan alat seperti curl. Misalnya, jika Anda ingin menyertakan beberapa JSON data dalam POST permintaan ke fungsi AndaURL, 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

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

Format peristiwa permintaan dan respons mengikuti skema yang sama dengan format payload Amazon API Gateway versi 2.0.

Minta format muatan

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.

2.0

routeKey

Fungsi URLs tidak menggunakan parameter ini. Lambda menetapkan ini $default sebagai placeholder.

$default

rawPath

Jalur permintaan. Misalnya, jika URL permintaannyahttps://{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-zA-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 permintaannyahttps://{url-id}.lambda-url.{region}.on.aws/example?name=Jane, maka queryStringParameters nilainya adalah JSON objek dengan kunci dari name dan nilaiJane.

{"name": "Jane"}

requestContext

Objek yang berisi informasi tambahan tentang permintaan, sepertirequestId, 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 fungsiURL.

"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 fungsi URL menggunakan jenis AWS_IAM auth. 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 pengguna (ARN) dari identitas pemanggil.

"arn:aws:iam::111122223333:user/example-user"

requestContext.authorizer.iam.userId

ID pengguna dari identitas pemanggil.

"AIDACOSFODNN7EXAMPLE2"

requestContext.domainName

Nama domain dari fungsi tersebutURL.

"<url-id>.lambda-url.us-west-2.on.aws"

requestContext.domainPrefix

Awalan domain dari fungsi URL tersebut.

"<url-id>"

requestContext.http

Objek yang berisi rincian tentang HTTP permintaan.

requestContext.http.method

HTTPMetode 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 permintaannyahttps://{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 TCP koneksi 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

TRUEjika bodinya adalah muatan biner dan dikodekan base64. FALSEjika tidak.

FALSE

stageVariables

Fungsi URLs tidak menggunakan parameter ini. Lambda menyetel ini ke null atau mengecualikan ini dari. JSON

null

Format payload respon

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 valid JSON dan tidak mengembalikan astatusCode, Lambda mengasumsikan hal berikut:

  • statusCode adalah 200.

  • content-type adalah application/json.

  • bodyadalah respon fungsi.

  • isBase64Encoded adalah false.

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

Contoh output untuk respon string

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

Contoh keluaran untuk JSON respons

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

Contoh keluaran untuk respons kustom

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

Cookie

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 HTTP respons Anda, seperti pada contoh berikut.

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