aws-lambda - 有时来自 lambda 函数的连接超时
问题描述
我不知道为什么,但有时 - 在 20 次 lambda 调用中,我收到一个错误:
Connection timed out after 120000ms
调用是从 ECS 容器完成的,所有(调用者和 lambda)都用 node.js 编写。
我应该检查什么?
解决方案
我知道这是一篇旧文章,但我会写下我是如何在我正在处理的 lambda 中使用相同的错误消息解决问题的。我希望这可以帮助有类似问题的人。
就我而言,我在 EC2 内还有一个 Web 应用程序,它通过lambda.invoke()
(npm aws-sdk) 调用 lambda。EC2 和 lambda 都在 Node.JS 上运行。即使错误记录在 EC2 内,消息也会由 lambda 本身抛出给调用者 (EC2)。
我的 lambda 向 API 发出了大约 3,000 个请求,大约需要 5 分钟(300,000 毫秒)才能得到所有响应。似乎 lambda Node.JS 运行时在 lambda 执行期间保持套接字处于活动状态,这高于 120,000 毫秒(2 分钟)。当 lambda 代码持续运行超过此阈值时,运行时会抛出错误,并且 lambda 会返回一个回调。
根据aws js sdk,AWS 对象有一个用于 http 超时的参数:
httpOptions (map) — 一组传递给低级 HTTP 请求的选项。目前支持的选项有:
- timeout [Integer] — 将套接字设置为在套接字上的非活动超时毫秒后超时。默认为两分钟 (120000)。
在我将此配置更改为 360,000 毫秒(6 分钟)后,lambda 成功执行。因此,您可以根据需要将此参数设置为更高的值:
AWS.config.update({httpOptions: {timeout: 360000}});
推荐阅读
- javascript - 从 ruby on rails 视图调用 javascript 函数
- python - 如何访问 mediawiki 中的表格
- sql - 备份表的动态变量名称
- accelerated-mobile-page - 通过 javascript 使 AMP 页面可被发现
- php - 将 Order By 与 Union 结合使用 - SQL 语句
- javascript - Google Chrome 使用 javascript fetch 将 GET 方法更改为 OPTIONS
- ios - 如何防止多个用户在应用内购买时使用相同的 Apple ID
- javascript - php $_POST 使用javascript调用php函数时返回空
- ajax - ajax查询不传递页面数据laravel 5.6
- java - 处理应用内 WiFi 状态的定期检查