同步调用 - AWS Lambda

同步调用

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

$ aws lambda invoke --function-name my-function --payload '{ "key": "value" }' response.json { "ExecutedVersion": "$LATEST", "StatusCode": 200 }

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


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

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

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

注意

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

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

$ aws lambda invoke --function-name my-function --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]

要从命令行获取调用的日志,请使用 --log-type 选项。响应包含一个 LogResult 字段,该字段包含来自调用的多达 4 KB 的 base64 编码日志。

$ aws lambda invoke --function-name my-function out --log-type Tail { "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

您可以使用 base64 实用程序来解码日志。

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d 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: 100 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64 实用工具在 Linux、macOS 和 Ubuntu on Windows 上可用。对于 macOS,命令为 base64 -D

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

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