将 Lambda 运行时 API 用于自定义运行时 - AWS Lambda

将 Lambda 运行时 API 用于自定义运行时

AWS Lambda 提供了用于自定义运行时的 HTTP API,接收来自 Lambda 的调用事件并在 Lambda 执行环境中发送回响应数据。本节包含 Lambda 运行时 API 的 API 参考。

执行环境的体系结构图。

运行时 API 版本 2018-06-01 的 OpenAPI 规范在 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 – Lambda 函数的 ARN、版本或在调用中指定的别名。

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

  • Lambda-Runtime-Trace-IdAWS X-Ray跟踪标头

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

  • Lambda-Runtime-Client-Context – 对于来自 AWS Mobile SDK 的调用,为有关客户端应用程序和设备的数据。

  • Lambda-Runtime-Cognito-Identity – 对于来自 AWS Mobile SDK 的调用,为有关 Amazon Cognito 身份提供商的数据。

不要对 GET 请求设置超时,因为响应可能会延迟。在 Lambda 引导运行时和运行时返回事件之间,运行时进程可能会冻结几秒钟。

请求 ID 用于跟踪 Lambda 中的调用。使用它可在您发送响应时指定调用。

跟踪标头包含跟踪 ID、父 ID 和采样决策。如果对请求进行采样,则由 Lambda 或某个上游服务对请求进行采样。运行时应设置具有标头的值的 _X_AMZN_TRACE_ID。X-Ray 开发工具包会读取此项以获取 ID 并确定是否要跟踪请求。

调用响应

路径/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> 格式。例如:

  • Runtime.NoSuchHandler

  • Runtime.APIKeyNotFound

  • Runtime.ConfigInvalid

  • Runtime.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> 格式。例如:

  • Runtime.NoSuchHandler

  • Runtime.APIKeyNotFound

  • Runtime.ConfigInvalid

  • Runtime.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"