Lambda 执行在 15 分钟后超时我该怎么办?

Lambda execution time out after 15 mins what I can do?

我在 Lambda 上有一个脚本 运行,我已将超时设置为最多 15 分钟,但它仍然给我超时错误,lofs 中没有太多信息,我该如何解决这个问题问题并发现什么花费了太多时间?我在本地测试了脚本,速度相当快。

这是错误:

{
  "errorMessage": "2020-09-10T18:26:53.180Z xxxxxxxxxxxxxxx Task timed out after 900.10 seconds"
}

如果您超过了 15 分钟的时间,您应该检查以下几项内容:

  • Lambda 是否连接到 VPC 中的资源?如果是,它是否通过 VPC 配置附加,并且目标资源是否允许来自 Lambda 的入站访问。
  • Lambda 是否连接到 public IP 但使用 VPC 配置?如果是这样,它将需要附加 NAT 以允许出站访问。
  • 您的 Lambda 中是否有任何长 运行 进程?

一旦您排除了这些因素,请考虑增加 Lambda 的可用资源,它可能会达到上限,因此性能会变慢。增加内存也会增加可用空间 CPU。

在代码中添加注释将记录到 CloudWatch 日志,这些可以帮助您确定代码中缓慢开始的位置。这是通过简单地调用您的语言的通用 output/debug 函数来完成的,即 Python 中的 print() 或 NodeJS 中的 console.log()

如果该功能在此之后仍预计会持续超过 15 分钟,您将需要将其分解为更小的功能来执行操作的逻辑部分

为此建议的编排器是使用 step function to handle the workflow for each stage. If you need shared storage between each Lambda you can make use of EFS 附加到所有 Lambda,这样它们就不需要 upload/download 在操作之间。

您关于它连接到 SQL 数据库的评论可能是关键。我假设 DB 在您的 VPC 中的 AWS 中。这需要特殊设置。查看

您可以做的另一件事是启用调试级别日志记录,然后在尝试 运行 之后查看 CloudWatch 中的详细信息。您没有提到您的 lambda 使用哪种语言,因此对于您使用的语言,如何执行此操作可能会有所不同。在 python:

中是这样的
LOGGER = logging.getLogger()
LOGGER.setLevel(logging.getLevelName('DEBUG'))