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

AWS Lambda 中的执行问题疑难解答

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

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

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

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

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

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

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

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

  • AWSLambdaBasicExecutionRole

  • AWSXRayDaemonWriteAccess

当您向函数添加权限时,也要更新其代码或配置。这将强制停止并替换正在运行的带过期凭证的函数实例。

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

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

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

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

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

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

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

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

具有使用 C 或 C ++ 编写的扩展模块的库,必须在与 Lambda (Amazon Linux) 具有相同处理器体系结构的环境中进行编译。有关更多信息,请参阅Python 中的 AWS Lambda 部署程序包