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

Lambda 中的执行问题疑难解答

当 Lambda 运行时运行函数代码时,可能会在已经处理事件一段时间的函数实例上处理事件,或者可能需要初始化一个新实例。在函数初始化期间、处理程序代码处理事件时或者当函数返回(或无法返回)响应,可能会发生错误。

函数执行错误可能是由您的代码、函数配置、下游资源或权限中的问题引起。如果您直接调用函数,则会在 Lambda 的响应中看到函数错误。如果您使用事件源映射或通过其他服务异步调用函数,则可能会在日志、死信队列或失败时的目标中找到错误。错误处理选项和重试行为因调用函数的方式和错误类型而异。

当您的函数代码或 Lambda 运行时返回错误时,来自 Lambda 的响应中的状态代码为“200 OK”。响应中是否存在错误由名为 X-Amz-Function-Error 的标头指示。400 和 500 系列状态代码保留用于调用错误

Lambda:执行时间过长

问题:函数执行时间太长。

如果您的代码在 Lambda 中运行所花费的时间长于在本地计算机上运行所花费的时间,则可能受到对该函数可用的内存或处理能力的限制。使用额外内存配置函数以增加内存和 CPU。

Lambda:未显示日志或跟踪

问题:日志未显示在 CloudWatch Logs 中。

问题:跟踪未显示在 Amazon X-Ray 中。

您的函数需要权限才能调用 CloudWatch Logs 和 X-Ray。更新函数的执行角色以向其授予权限。添加以下托管策略以启用日志和跟踪。

  • AWSLambdaBasicExecutionRole

  • AWSXRayDaemonWriteAccess

向函数添加权限时,请也更新其代码或配置。这会强制停止并替换函数的具有过时凭证的运行实例。

注意

函数调用后,日志可能需要 5 到 10 分钟才能显示。

Lambda:函数在执行完成之前返回

问题:(Node.js) 函数在代码完成执行之前返回

许多库(包括 Amazon 开发工具包)都是异步操作。当您进行网络调用或执行其他需要等待响应的操作时,库返回一个名为 promise 的对象,该对象在后台跟踪操作的进度。

要等待 promise 解析为响应,请使用 await 关键字。这会阻止您的处理程序代码执行,直到将 promise 解析为包含响应的对象。如果您不需要在代码中使用来自响应的数据,则可以直接将 promise 返回到运行时。

一些库不返回 promise,但可以包装到返回 promise 的代码中。有关更多信息,请参阅 Node.js 中的 Amazon Lambda 函数处理程序

Amazon 开发工具包:版本和更新

问题:运行时包含的 Amazon 开发工具包不是最新版本

问题:运行时中包含的 Amazon 开发工具包自动更新

脚本语言的运行时包括 Amazon 开发工具包,并定期更新到最新版本。每个运行时的当前版本在运行时页面上列出。要使用较新版本的Amazon开发工具包,或将函数锁定为特定版本,您可以将库与函数代码捆绑起来,或创建 Lambda 层。有关创建具有依赖项的部署程序包的详细信息,请参阅以下主题:

Node.js

使用 .zip 文件归档部署 Node.js Lambda 函数

Python

使用 .zip 文件归档部署 Python Lambda 函数

Ruby

使用 .zip 文件归档部署 Ruby Lambda 函数

Java

使用 .zip 或 JAR 文件归档部署 Java Lambda 函数

Go

使用 .zip 文件归档部署 Go Lambda 函数

C#

使用 .zip 文件归档部署 C# Lambda 函数

PowerShell

使用 .zip 文件归档部署 PowerShell Lambda 函数

Python:库未正确加载

问题:(Python) 无法从部署程序包中正确加载某些库

具有使用 C 或 C ++ 编写的扩展模块的库,必须在与 Lambda (Amazon Linux) 具有相同处理器架构的环境中进行编译。有关更多信息,请参阅 使用 .zip 文件归档部署 Python Lambda 函数