【问题标题】:Lambda starts timing out randomly when communicating with DynamoDBLambda 在与 DynamoDB 通信时开始随机超时
【发布时间】:2019-06-04 04:57:00
【问题描述】:

我有一个 Node.js Lambda 代码库,可以与 DynamoDB 中的小型数据集(每个小于 400 字节)进行通信。在向 DynamoDB 发出 get() 请求(通过 dynamoDbdAWS.DynamoDB.DocumentClient();)时,该函数时常会超时 5 分钟。

问题在于,这个问题何时会发生完全是随机的,但当它工作时,从冷启动开始需要大约 2 秒,因此运行超过 5 分钟是没有意义的,而且是随机的。

  • 这是一个开发环境,所以只有我自己在使用它,我每天可能会执行 10 个请求
  • context.callbackWaitsForEmptyEventLoop = false; 已设置
  • 内存分配永远不会超过 45MB(128MB 集)
  • 我直接在 Lambda 中测试
  • 代码通过Serverless部署
  • 在使用无服务器进行测试时,它在本地工作,而 Lambda 失败

我继承了这个项目,但对它周围的架构有很好的理解,而且它相当简单,但我之前没有用 Lambda 做过很多工作。

任何我应该寻找的想法或任何已知问题都将是一个巨大的帮助。

【问题讨论】:

  • Lambda 函数是否配置为在 VPC 中运行?
  • @MarkB 确实如此。

标签: node.js amazon-web-services aws-lambda amazon-dynamodb serverless


【解决方案1】:

听起来 Lambda 函数配置为在其中运行的一个(或多个)VPC 子网没有到 NAT 网关(或AWS PrivateLink 配置)的路由。因此,只要 Lambda 函数使用该子网,它就无法访问 AWS API。

如果 Lambda 函数实际上不需要访问 VPC 中的任何资源,那么最好不要将其配置为使用 VPC。

【讨论】:

  • 添加 DynamoDB VPC 终端节点将是一个很好的解决方案,您可以节省 NAT 网关数据成本。
  • 看起来这可能就是问题所在。我今天要看看这个,并希望确认它是:)
  • 所以我们使用 VPC Endpoints 连接到 DynamoDB 实例,但结果发现子网配置错误,如建议的那样。我们连接了一个公共子网和一个私有子网,而不是两个私有子网。
猜你喜欢
  • 2016-12-22
  • 2016-09-24
  • 2022-01-10
  • 2020-09-05
  • 1970-01-01
  • 2021-07-18
  • 2018-03-25
  • 2021-05-27
  • 1970-01-01
相关资源
最近更新 更多