将 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-Id
– AWS 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"