API針對自訂執行階段使用 Lambda 執行階段 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

API針對自訂執行階段使用 Lambda 執行階段

AWS Lambda 提供自HTTPAPI訂執行階段,以接收來自 Lambda 的叫用事件,並將回應資料傳回 Lambda 執行環境中。本節包含 Lambda 執行階段的API參考資料API。

執行環境的架構圖表。

適用於執行階段API版本的開放API規格可在 runtime-api.zip 中取得

若要建立API要求URL,執行階段會從AWS_LAMBDA_RUNTIME_API環境變數取得API端點、新增API版本,然後新增所需的資源路徑。

範例 請求
curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next"

下次調用

路徑/runtime/invocation/next

方法GET

執行時間會傳送此訊息至 Lambda 來請求調用事件。回應主體包含來自調用的有效負載,該調用是包含來自函數觸發器的事JSON件數據的文檔。回應標頭包含有關該次調用的額外資料。

回應標頭
  • Lambda-Runtime-Aws-Request-Id - 請求 ID,它將識別觸發函數調用的請求。

    例如:8476a536-e9f4-11e8-9739-2dfe598c3fcd

  • Lambda-Runtime-Deadline-Ms - 函數逾時的日期,以 Unix 時間毫秒為單位。

    例如:1542409706888

  • Lambda-Runtime-Invoked-Function-Arn— 叫用中指定ARN的 Lambda 函數、版本或別名。

    例如:arn:aws:lambda:us-east-2:123456789012:function:custom-runtime

  • Lambda-Runtime-Trace-Id - AWS X-Ray 追蹤標頭

    例如:Root=1-5bef4de7-ad49b0e87f6ef6c87fc2e700;Parent=9a9197af755a6419;Sampled=1

  • Lambda-Runtime-Client-Context— 對於從 AWS 移動調用SDK,有關客戶端應用程序和設備的數據。

  • Lambda-Runtime-Cognito-Identity— 對於來自 AWS 行動裝置的呼叫SDK,請參閱 Amazon Cognito 身分供應商的相關資料。

請勿在 GET 請求上設定逾時,因為回應可能會延遲。在 Lambda 引導執行時間與執行時間有可傳回的事件之間,執行時間處理可能會凍結幾秒鐘。

請求 ID 將追蹤 Lambda 內的調用。您可以在傳送回應時使用此值指定調用。

追蹤標頭包含追蹤 ID、父系 ID 和抽樣決策。如果對請求進行抽樣,請求將由 Lambda 或上游服務進行抽樣。執行時間應設定 _X_AMZN_TRACE_ID 為標頭的值。X-Ray SDK 讀取此內容以獲取IDs並確定是否跟踪請求。

調用回應

路徑/runtime/invocation/AwsRequestId/response

方法POST

在函數執行到完成之後,執行時間會傳送調用回應至 Lambda。若為同步調用,Lambda 會將回應傳送給用戶端。

範例 成功請求
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response" -d "SUCCESS"

初始化錯誤

如果函數傳回錯誤或執行時間在初始化期間遇到錯誤,執行時間會使用此方法將錯誤報告給 Lambda。

路徑/runtime/init/error

方法POST

標頭

Lambda-Runtime-Function-Error-Type - 執行時間遇到的錯誤類型。必要:否。

此標頭包含一個字串值。Lambda 可接受任何字串,但我們建議使用格式 <category.reason>。例如:

  • 執行階段。 NoSuchHandler

  • 執行階段。 APIKeyNotFound

  • 執行階段。 ConfigInvalid

  • 執行階段。 UnknownReason

主體參數

ErrorRequest - 關於錯誤的資訊。必要:否。

此欄位是具有下列結構的JSON物件:

{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }

請注意,Lambda 接受 errorType 的任何值。

下列範例顯示 Lambda 函數錯誤訊息,其中函數無法剖析調用中提供的事件資料。

範例 函數錯誤
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
回應內文參數
  • StatusResponse – 字串. 狀態信息,隨 202 回應代碼一起傳送。

  • ErrorResponse - 其他錯誤資訊,與錯誤回應代碼一起傳送。 ErrorResponse 包含錯誤類型和錯誤訊息。

回應代碼
  • 202 - 已接受

  • 403 - 禁止

  • 500 - 容器錯誤。不可復原的狀態。執行時間應立即退出。

範例 初始化錯誤請求
ERROR="{\"errorMessage\" : \"Failed to load function.\", \"errorType\" : \"InvalidFunctionException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/init/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"

調用錯誤

如果函數傳回錯誤或執行時間遇到錯誤,執行時間會使用此方法將錯誤報告給 Lambda。

路徑/runtime/invocation/AwsRequestId/error

方法POST

標頭

Lambda-Runtime-Function-Error-Type - 執行時間遇到的錯誤類型。必要:否。

此標頭包含一個字串值。Lambda 可接受任何字串,但我們建議使用格式 <category.reason>。例如:

  • 執行階段。 NoSuchHandler

  • 執行階段。 APIKeyNotFound

  • 執行階段。 ConfigInvalid

  • 執行階段。 UnknownReason

主體參數

ErrorRequest - 關於錯誤的資訊。必要:否。

此欄位是具有下列結構的JSON物件:

{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }

請注意,Lambda 接受 errorType 的任何值。

下列範例顯示 Lambda 函數錯誤訊息,其中函數無法剖析調用中提供的事件資料。

範例 函數錯誤
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
回應內文參數
  • StatusResponse – 字串. 狀態信息,隨 202 回應代碼一起傳送。

  • ErrorResponse - 其他錯誤資訊,與錯誤回應代碼一起傳送。 ErrorResponse 包含錯誤類型和錯誤訊息。

回應代碼
  • 202 - 已接受

  • 400 - 錯誤請求

  • 403 - 禁止

  • 500 - 容器錯誤。不可復原的狀態。執行時間應立即退出。

範例 錯誤請求
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 ERROR="{\"errorMessage\" : \"Error parsing event data.\", \"errorType\" : \"InvalidEventDataException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"