2

https://docs.aws.amazon.com/documentdb/latest/developerguide/connect.html

我在通过无服务器框架部署的 lambda node.js 代码中使用上述代码。我已经通过 mongoose 库编写了自己的代码,但是没有用,然后我决定使用 AWS 文档中的代码,但即使这样也没有用。

到目前为止我做了什么:

  • DocDB 实例和 Lambda 函数在同一个 VPC 中

  • 试图打开和关闭 TLS(使用 TLS 的证书,按照文档描述做了所有事情)

  • 我已经允许 27017 端口到各个方向(可以肯定的是,出站和入站),甚至允许所有端口和协议的所有流量(是的,这是一种不好的做法,但试图找到问题的根源)

  • 尝试了 node.js 的 mongoose 或 vanilla mongo 驱动程序(最新版本和降级版本)

  • 如果我在同一个 VPC 中创建 EC2 实例并通过 SSH 使用 mongoshell,我可以连接到该实例。但是 lambda 无法连接。

  • 试图增加socketTimeoutMS、poolSize 和reconnectTries。

  • 甚至试图将我的整个项目部署到另一个区域。

以上任何一项都没有帮助。我经常遇到的错误是:

2019-11-20T13:44:34.282Z    57cba251-15aa-4c3d-8601-f5c7e9270b66    INFO    { MongoNetworkError: failed to connect to server [****.****.us-east-1.docdb.amazonaws.com:27017] on first connect [MongoNetworkError: connection 0 to ****.****.us-east-1.docdb.amazonaws.com:27017 timed out]
    at Pool.<anonymous> (/var/task/node_modules/mongodb-core/lib/topologies/server.js:562:11)
    at Pool.emit (events.js:198:13)
    at Connection.<anonymous> (/var/task/node_modules/mongodb-core/lib/connection/pool.js:316:12)
    at Object.onceWrapper (events.js:286:20)
    at Connection.emit (events.js:198:13)
    at Socket.<anonymous> (/var/task/node_modules/mongodb-core/lib/connection/connection.js:256:10)
    at Object.onceWrapper (events.js:286:20)
    at Socket.emit (events.js:198:13)
    at Socket._onTimeout (net.js:443:8)
    at ontimeout (timers.js:436:11)
  name: 'MongoNetworkError',
  message:
   'failed to connect to server [****.****.us-east-1.docdb.amazonaws.com:27017] on first connect [MongoNetworkError: connection 0 to ****.****.us-east-1.docdb.amazonaws.com:27017 timed out]',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

此外,我之前收到“服务器选择在 30000 毫秒后超时”错误,但是当我从连接 URI 中删除 /dbname 时,该错误消失了。

在第一个请求中,我没有得到控制台输出(存在于 aws doc 代码中),但是当我执行第二个请求时,它返回了错误。我在 docDB 指标中看到了一些连接,但如果连接成功,我应该有一个控制台输出?

我最好的猜测是安全组上的防火墙断开了连接,但我确信我允许安全组页面上的端口并且组和 VPC 设置正确。我对 RDS 实例做了同样的事情(这是一个类似的问题),它已经解决了,但这次不是。

我的连接 URI 基本上是: mongodb://username:pwd@ .us-east-1.docdb.amazonaws.com:27017当我将 /dbname 添加到字符串末尾时,出现服务器选择超时错误。

我找不到问题的根源。在互联网上,人们大多谈论在同一个 VPC、安全组或 mongo 客户端错误。

正如您从上面的列表中看到的那样,我尝试了所有这些。我真的很渴望任何想法。

非常感谢您提前。

4

0 回答 0