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 中。这需要特殊设置。查看
- https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html
- https://docs.aws.amazon.com/lambda/latest/dg/services-rds-tutorial.html
您可以做的另一件事是启用调试级别日志记录,然后在尝试 运行 之后查看 CloudWatch 中的详细信息。您没有提到您的 lambda 使用哪种语言,因此对于您使用的语言,如何执行此操作可能会有所不同。在 python:
中是这样的
LOGGER = logging.getLogger()
LOGGER.setLevel(logging.getLevelName('DEBUG'))
我在 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 中。这需要特殊设置。查看
- https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html
- https://docs.aws.amazon.com/lambda/latest/dg/services-rds-tutorial.html
您可以做的另一件事是启用调试级别日志记录,然后在尝试 运行 之后查看 CloudWatch 中的详细信息。您没有提到您的 lambda 使用哪种语言,因此对于您使用的语言,如何执行此操作可能会有所不同。在 python:
中是这样的LOGGER = logging.getLogger()
LOGGER.setLevel(logging.getLevelName('DEBUG'))