View a markdown version of this page

Memanggil URL fungsi Lambda - AWS Lambda

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

Memanggil URL fungsi Lambda

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

Tip

Lambda menawarkan dua cara untuk memanggil fungsi Anda melalui titik akhir HTTP: URL fungsi dan Amazon API Gateway. Jika Anda tidak yakin metode mana yang terbaik untuk kasus penggunaan Anda, lihatPilih metode untuk memanggil fungsi Lambda Anda menggunakan permintaan HTTP.

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

URL fungsi tidak didukung di semua AWS wilayah. Untuk memeriksa ketersediaan, lihat AWS Layanan Regional dan filter berdasarkanFeature Name = Function URLs.

URL fungsi mendukung tumpukan ganda, mendukung IPv4 dan IPv6. Setelah mengkonfigurasi URL fungsi Anda, Anda dapat memanggil fungsi Anda melalui titik akhir HTTP (S) dengan menggunakan 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.

Dasar-dasar pemanggilan URL fungsi

Jika URL fungsi Anda menggunakan jenis autenti AWS_IAM kasi, Anda harus menandatangani setiap permintaan HTTP menggunakan Sig AWS nature Version 4 (SIGv4). Alat seperti Postman 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. Ketika 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 Men andatangani AWS permintaan dengan Tanda Tangan Versi 4 di Referensi Umum Amazon Web Services Panduan.

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

Untuk menguji GET permintaan sederhana untuk fungsi Anda, gunakan browser web. Misalnya, jika URL fungsi Anda adalahhttps://abcdefg.lambda-url.us-east-1.on.aws, dan membutuhkan parameter stringmessage, 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 tanggapan

Ketika 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 pay load Amazon API Gateway versi 2.0.

Minta format muatan

Payload 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. URL fungsi Lambda saat ini mendukung format payload versi 2.0.

2.0

routeKey

URL fungsi tidak menggunakan parameter ini. Lambda menyetel ini $default sebagai placeholder.

$default

rawPath

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

"33anwqw8fj"

requestContext.authentication

URL fungsi tidak menggunakan parameter ini. Lambda menyetel ini kenull.

null

requestContext.authorizer

Objek yang berisi informasi tentang identitas pemanggil, jika URL fungsi menggunakan jenis autenti AWS_IAM kasi. Jika tidak, Lambda menyetel ini kenull.

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) penelepon.

"AIDACKCEVSQ6C2EXAMPLE"

requestContext.authorizer.iam.cognitoIdentity

URL fungsi 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 pemanggil.

"AIDACKCEVSQORGEXAMPLE"

requestContext.authorizer.iam.userArn

Nama Sumber Daya Amazon (ARN) pengguna 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 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 detail 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 adalahhttps://{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 yang membuat permintaan.

123.123.123.123

requestContext.http.userAgent

Nilai header User-Agent permintaan.

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

URL fungsi tidak menggunakan parameter ini. Lambda menyetel ini $default sebagai placeholder.

$default

requestContext.stage

URL fungsi tidak menggunakan parameter ini. Lambda menyetel 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, tubuh dikodekan base64.

{"key1": "value1", "key2": "value2"}

pathParameters

URL fungsi tidak menggunakan parameter ini. Lambda menyetel ini ke null atau mengecualikan ini dari JSON.

null

isBase64Encoded

TRUEjika tubuh adalah payload biner dan dikodekan base64. FALSEjika tidak.

FALSE

stageVariables

URL fungsi tidak menggunakan parameter ini. Lambda menyetel ini ke null atau mengecualikan ini dari JSON.

null

Format muatan respons

Ketika 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 astatusCode, Lambda mengasumsikan hal berikut:

  • statusCode adalah 200.

    catatan

    Yang valid statusCode berada dalam kisaran 100 hingga 599.

  • content-type adalah application/json.

  • bodyadalah respons fungsi.

  • isBase64Encoded adalah false.

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

Contoh keluaran untuk respons string

Output fungsi lambda Output respons yang ditafsirkan Respon HTTP (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 respons JSON

Output fungsi lambda Output respons yang ditafsirkan Respon HTTP (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

Output fungsi lambda Output respons yang ditafsirkan Respon HTTP (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 dalam objek payload respons Anda. Lambda secara otomatis menafsirkan ini dan menambah set-cookie kannya sebagai header dalam respons HTTP Anda, seperti dalam contoh berikut.

Output fungsi lambda Respon HTTP (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!" }