同步叫用 - AWS Lambda

同步叫用

當您以同步方式叫用函數時,Lambda 會執行函數並等候回應。當函數執行完成時,Lambda 會從函數的程式碼傳回回應,其中包含叫用的函數版本等額外資料。若要透過 AWS CLI 以同步方式叫用函式,請使用 invoke 命令。

aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json

如果您使用 AWS CLI 的第 2 版,則需要 cli-binary-format 選項。您也可以在 AWS CLI config 檔案中設定此選項。

您應該會看到下列輸出:

{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }

下圖顯示以同步方式叫用 Lambda 函數的用戶端。Lambda 會將事件直接傳送到函數,並將函數的回應傳送回叫用者。


      用戶端同步叫用函式,並等待回應。

payload 是包含 JSON 格式事件的字串。AWS CLI 從該函數寫入回覆的檔案名稱是 response.json。如果函式傳回物件或錯誤,則回應是 JSON 格式的物件或錯誤。如果函式結束,且沒有發生錯誤,則回應為 null

命令的輸出會顯示於終端機,包括來自 Lambda 的回應中標頭中的資訊。這包括處理事件的版本 (當您使用別名時很實用),以及 Lambda 傳回的狀態碼。如果 Lambda 能夠執行函數,則狀態碼為 200,即使函數傳回了錯誤。

注意

對於逾時很久的函式,您的用戶端可能在等待回應的同時,在同步叫用期間中斷連線。設定您的 HTTP 用戶端、SDK、防火牆、Proxy 或作業系統,以透過逾時或持續作用設定允許長時間連線。

如果 Lambda 無法執行函數,錯誤則會顯示在輸出中。

aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload value response.json

您應該會看到下列輸出:

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null') at [Source: (byte[])"value"; line: 1, column: 11]

AWS CLI 是開放原始碼工具,可讓您在命令列 shell 中使用命令來與 AWS 服務互動。若要完成本節中的步驟,您必須執行下列各項:

您可以透過 AWS CLI,使用 --log-type 命令選項來擷取要叫用的日誌。其回應將包含 LogResult 欄位,內含該次叫用的 base64 編碼日誌 (最大達 4 KB)。

範例 擷取日誌 ID

下列範例顯示如何從名稱為 my-function 的函數的 LogResult 欄位來擷取日誌 ID

aws lambda invoke --function-name my-function out --log-type Tail

您應該會看到下列輸出:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

範例 解碼日誌

在相同的命令提示中,使用 base64 公用程式來解碼日誌。下列範例顯示如何擷取 my-function 的 base64 編碼日誌。

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d

您應該會看到下列輸出:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64 公用程式可在 Linux、macOS 和 Ubuntu on Windows 上使用。macOS 使用者可能需要使用 base64 -D

如需有關 Invoke API 的詳細資訊 (包括參數、標頭和錯誤的完整清單),請參閱叫用

當您直接叫用函式時,您可以檢查回應中是否有錯誤並重試。AWS CLI 和 AWS SDK 也會在用戶端逾時、調節和服務錯誤時自動重試。如需詳細資訊,請參閱 AWS Lambda 中錯誤處理和自動重試