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 层。有关创建具有依赖项的部署程序包的详细信息,请参阅以下主题:
Python:库未正确加载
问题:(Python) 无法从部署程序包中正确加载某些库
具有使用 C 或 C ++ 编写的扩展模块的库,必须在与 Lambda (Amazon Linux) 具有相同处理器架构的环境中进行编译。有关更多信息,请参阅 使用 .zip 文件归档部署 Python Lambda 函数。