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

同步调用 Lambda 函数

当您同步调用某个函数时,Lambda 会运行该函数并等待响应。当函数完成时,Lambda 返回来自函数代码的响应以及其他数据,例如已调用函数的版本。要使用 Amazon CLI 同步调用函数,请使用 invoke 命令。

aws lambda invoke --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

如果使用 cli-binary-format 版本 2,则 Amazon CLI 选项是必需的。要将其设为默认设置,请运行 aws configure set cli-binary-format raw-in-base64-out。有关更多信息,请参阅版本 2 的 Amazon Command Line Interface 用户指南中的 Amazon CLI 支持的全局命令行选项

您应看到以下输出:

{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}

下图显示了同步调用 Lambda 函数的客户端。Lambda 将事件直接发送给函数,并将函数的响应发送回调用方。

客户端同步调用函数并等待响应。

payload 是一个包含 JSON 格式事件的字符串。Amazon CLI 用来写入函数响应的文件的名称为 response.json。如果函数返回对象或错误,则响应正文是 JSON 格式的对象或错误。如果函数退出时没有错误,则响应正文为 null

注意

Lambda 在发送响应之前不会等待外部扩展完成。Lambda 扩展作为独立进程在执行环境中运行,并可以在完成函数调用后继续运行。有关更多信息,请参阅 使用 Lambda 扩展增强 Lambda 函数

该命令的输出(显示在终端中)包含来自 Lambda 响应中的标头的信息。这包括处理事件的版本(在使用别名时非常有用),以及 Lambda 返回的状态代码。如果 Lambda 能够运行该函数,则状态代码为 200,即使该函数返回错误也是如此。

注意

对于超时很长的函数,在等待响应的同步调用期间,客户端可能会断开连接。配置您的 HTTP 客户端、软件开发工具包、防火墙、代理或操作系统,以允许针对超时或保持活动设置保持长时间的连接。

如果 Lambda 无法运行该函数,则将在输出中显示错误。

aws lambda invoke --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload value response.json

您应看到以下输出:

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"value"; line: 1, column: 11]

Amazon CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您必须拥有 Amazon CLI 版本 2

您可以通过 Amazon CLI,使用 --log-type 命令选项检索调用的日志。响应包含一个 LogResult 字段,其中包含多达 4KB 来自调用的 base64 编码日志。

例 检索日志 ID

以下示例说明如何从 LogResult 字段中检索名为 my-function 的函数的日志 ID

aws lambda invoke --function-name my-function out --log-type Tail

您应看到以下输出:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
例 解码日志

在同一命令提示符下,使用 base64 实用程序解码日志。以下示例说明如何为 my-function 检索 base64 编码的日志。

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

如果使用 cli-binary-format 版本 2,则 Amazon CLI 选项是必需的。要将其设为默认设置,请运行 aws configure set cli-binary-format raw-in-base64-out。有关更多信息,请参阅版本 2 的 Amazon Command Line Interface 用户指南中的 Amazon CLI 支持的全局命令行选项

您应看到以下输出:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64 实用程序在 Linux、macOS 和 Ubuntu on Windows 上可用。macOS 用户可能需要使用 base64 -D

有关 Invoke API 的更多信息(包括参数、标头和错误的完整列表),请参阅调用

当您直接调用函数时,可以检查错误的响应并重试。在出现客户端超时、节流和服务错误时,Amazon CLI 和Amazon开发工具包也会自动重试。有关更多信息,请参阅了解 Lambda 中的重试行为