非同步調用 Lambda 函數
數個 AWS 服務 (例如 Amazon Simple Storage Service (Amazon S3) 和 Amazon Simple Notification Service (Amazon SNS)) 會以非同步方式調用函數以處理事件。您也可以使用 AWS Command Line Interface (AWS CLI) 或其中一個 AWS SDK 以非同步方式調用 Lambda 函數。當您以非同步方式呼叫函數時,您不需要等待來自函數程式碼的回應。您可以將事件傳遞給 Lambda,而 Lambda 會處理其餘的工作。您可以設定 Lambda 處理錯誤的方式,且可將調用記錄傳送至 Amazon Simple Queue Service (Amazon SQS) 或 Amazon EventBridge (EventBridge) 這類下游資源,以便將您應用程式的元件鏈結在一起。
下圖顯示以非同步方式來調用 Lambda 函數的用戶端。Lambda 會先將事件排入佇列,再將事件傳送到函數。
針對非同步調用,Lambda 會將事件置放在佇列中,並傳回成功回應,其中不包含其他資訊。單獨的程序會從佇列讀取事件,並將事件傳送到您的函數。
若要使用 AWS Command Line Interface (AWS CLI) 或其中一個 AWS SDK 以非同步方式調用 Lambda 函數,須將 InvocationType 參數設定為 Event。以下是使用 AWS CLI 命令調用函數的範例。
aws lambda invoke \ --function-name my-function \--invocation-typeEvent\ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json
您應該會看到下列輸出:
{
"StatusCode": 202
}如果您使用 AWS CLI 第 2 版,則需要 cli-binary-format 選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》中 AWS CLI 支援的全域命令列選項。
輸出檔 (response.json) 不包含任何資訊,但仍會在您執行此命令時建立。如果 Lambda 無法將事件新增到佇列,錯誤訊息就會顯示在命令輸出中。