Lambda 运行时 API - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Lambda 运行时 API

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


        执行环境的体系结构图。

运行时 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-IdAmazon X-Ray跟踪标头

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

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

  • Lambda-Runtime-Cognito-Identity – 对于来自 Amazon 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> 格式。例如:

  • 运行时间。 NoSuchHandler

  • runtime.api KeyNotFound

  • 运行时间。 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

  • runtime.api KeyNotFound

  • 运行时间。 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"