本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
調用 Lambda 函數 URLs
函數URL是 Lambda 函數的專用 HTTP (S) 端點。您可以透URL過 Lambda 主控台或 Lambda 建立和設定函數API。當您建立函數時URL,Lambda 會自動為您產生唯一的URL端點。一旦你創建一個函數URL,它的URL端點永遠不會改變。函數URL端點具有以下格式:
https://
<url-id>
.lambda-url.<region>.on.aws
注意
以下不支援函數 URLs AWS 區域:亞太區域 (海德拉巴) (ap-south-2
)、亞太區域 (墨爾本) (ap-southeast-4
)、亞太區域 (馬來西亞ap-southeast-5
) ()、加拿大西部 (卡加利ca-west-1
) ()、歐洲 (西班牙eu-south-2
) ()、歐洲 (蘇黎世eu-central-2
) ()、以色列 (特拉維夫il-central-1
) () 和中東 (UAE) (me-central-1
)。
功能URLs是雙堆棧啟用,支持IPv4和IPv6。配置函數後URL,您可以通過 Web 瀏覽器,curl,郵差或任何HTTP客戶端通過其HTTP(S)端點調用函數。若要叫用函數URL,您必須擁有lambda:InvokeFunctionUrl
權限。如需詳細資訊,請參閱存取控制。
函數URL調用基礎知識
如果您的函數URL使用 AWS_IAM
auth 類型,則必須使用AWS 簽名版本 4(SIGv4)對每個HTTP請求進行簽名。awscurl
如果您不使用工具向函數簽署HTTP請求URL,則必須使用 Sigv4 手動簽署每個請求。當您的函數URL收到請求時,Lambda 也會計算 SIGv4 簽名。唯有簽章相符,Lambda 才會處理請求。有關如何使用 Sigv4 手動簽署請求的說明,請參閱Amazon Web Services 一般參考 指南中的使用簽名版本 4 簽署 AWS 請求。
如果您的函數URL使用 NONE
auth 類型,則不必使用 Sigv4 對請求進行簽名。您可以使用 Web 瀏覽器,捲曲,郵遞員或任何HTTP客戶端調用您的函數。
如要測試函數的簡易 GET
請求,請使用 Web 瀏覽器。例如,如果你的函數URL是https://abcdefg.lambda-url.us-east-1.on.aws
,並且它接受一個字符串參數message
,你的請求URL可能如下所示:
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
若要測試其他要HTTP求,例如POST
要求,您可以使用 curl 等工具。例如,如果您想在函數的POST
請求中包含一些JSON數據URL,則可以使用以下 curl 命令:
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'
請求和回應承載
當客戶端調用您的函數時URL,Lambda 會將請求映射到事件對象,然後再將其傳遞給您的函數。然後,您函數的回應會對HTTP應至 Lambda 透過函數傳回給用戶端的回應URL。
請求和回應事件格式遵循與 Amazon API 閘道承載資料格式 2.0 版相同的結構描述。
請求承載格式
請求承載的結構如下:
{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=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 }
參數 | 描述 | 範例 |
---|---|---|
|
此事件的承載格式版本。Lambda 函數URLs目前支援有效載荷格式 2.0 版。 |
|
|
函數URLs不使用此參數。Lambda 將此設為 |
|
|
請求路徑。例如,如果請求URL是 |
|
|
內含請求查詢字串參數的原始字串。支援的字元包含 |
|
|
內含隨請求一併傳送之所有 Cookie 的陣列。 |
|
|
以鍵值對形式呈現的請求標頭清單。 |
|
|
請求的查詢參數。例如,如果請求URL是 |
|
|
包含有關請求的其他信息的對象,例如 |
|
|
函數擁有者的 AWS 帳戶 識別碼。 |
|
|
函數的識別碼URL。 |
|
|
函數URLs不使用此參數。Lambda 將此設為 |
|
|
如果函數使用 |
|
|
呼叫者身分的存取金鑰。 |
|
|
來電者識別 AWS 帳戶 碼。 |
|
|
呼叫者的 ID (使用者 ID)。 |
|
|
函數URLs不使用此參數。Lambda 會將其設定為 |
|
|
與呼叫者身分相關聯的委託人組織 ID。 |
|
|
呼叫者身分的使用者 Amazon 資源名稱 (ARN)。 |
|
|
呼叫者身分的使用者 ID。 |
|
|
函數的網域名稱URL。 |
|
|
函數的域前綴URL。 |
|
|
包含有關HTTP請求詳細資訊的物件。 |
|
|
此要求中使用的HTTP方法。有效值包括 |
|
|
請求路徑。例如,如果請求URL是 |
|
|
請求的通訊協定。 |
|
|
提出要求之立即TCP連線的來源 IP 位址。 |
|
|
使用者代理程式請求標頭的值。 |
|
|
呼叫請求的 ID。您可以使用此 ID 追蹤與函數相關的呼叫日誌。 |
|
|
函數URLs不使用此參數。Lambda 將此設為 |
|
|
函數URLs不使用此參數。Lambda 將此設為 |
|
|
請求的時間戳記。 |
|
|
Unix epoch 時間格式的請求時間戳記。 |
|
|
請求的本文。如果請求的內容屬於二進位類型,則本文會採用 base64 編碼。 |
|
|
函數URLs不使用此參數。Lambda 會將其設定為 |
|
|
如果本文為二進位承載並採用 base64 編碼,此值為 |
|
|
函數URLs不使用此參數。Lambda 會將其設定為 |
|
回應承載格式
當函數傳回回應時,Lambda 會剖析回應並將其轉換為回HTTP應。函數回應承載的格式如下:
{ "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 會為您推斷回應格式。如果您的函數返回有效JSON且未返回 astatusCode
,Lambda 會假設以下內容:
-
statusCode
是200
。 -
content-type
是application/json
。 -
body
是函數的回應。 -
isBase64Encoded
是false
。
下列範例顯示 Lambda 函數的輸出如何對應至回應裝載,以及回應裝載如何對應至最終HTTP回應。當客戶端調用您的函數時URL,他們會看到HTTP響應。
字符串響應的示例輸出
Lambda 函數輸出 | 轉譯後的回應輸出 | HTTP響應(客戶看到的內容) |
---|---|---|
|
|
|
JSON回應的範例輸出
Lambda 函數輸出 | 轉譯後的回應輸出 | HTTP響應(客戶看到的內容) |
---|---|---|
|
|
|
自訂回應的範例輸出
Lambda 函數輸出 | 轉譯後的回應輸出 | HTTP響應(客戶看到的內容) |
---|---|---|
|
|
|
Cookie
如要從函數傳回 Cookie,請勿手動新增 set-cookie
標頭。您應將 Cookie 加入回應承載物件中。Lambda 會自動解譯這個問題,並將它們新增為HTTP回應中的set-cookie
標頭,如下列範例所示。
Lambda 函數輸出 | HTTP響應(客戶看到的內容) |
---|---|
|
|