同步调用
当您同步调用某个函数时,Lambda 会运行该函数并等待响应。当函数完成时,Lambda 返回来自函数代码的响应以及其他数据,例如已调用函数的版本。要使用 AWS 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,则 AWS CLI 选项是必需的。要将其设为默认设置,请运行 aws configure set cli-binary-format raw-in-base64-out
。有关更多信息,请参阅版本 2 的 AWS Command Line Interface 用户指南中的 AWS CLI 支持的全局命令行选项。
您应看到以下输出:
{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }
下图显示了同步调用 Lambda 函数的客户端。Lambda 将事件直接发送给函数,并将函数的响应发送回调用方。
![客户端同步调用函数并等待响应。](images/invocation-sync.png)
payload
是一个包含 JSON 格式事件的字符串。AWS 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]
AWS CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。要完成本节中的步骤,您必须满足以下条件:
您可以通过 AWS 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,则 AWS CLI 选项是必需的。要将其设为默认设置,请运行 aws configure set cli-binary-format raw-in-base64-out
。有关更多信息,请参阅版本 2 的 AWS Command Line Interface 用户指南中的 AWS 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 Windowsbase64 -D
。
有关 Invoke
API 的更多信息(包括参数、标头和错误的完整列表),请参阅调用。
当您直接调用函数时,可以检查错误的响应并重试。在出现客户端超时、节流和服务错误时,AWS CLI 和AWS开发工具包也会自动重试。有关更多信息,请参阅了解 Lambda 中的重试行为。