标签: aws-documentdb

使用 Python 从 AWS Lambda 连接到 DocumentDB

我正在尝试从 Lambda 函数连接到 DocumentDB。

我已经按照本教程配置了 DocumentDB ,并且可以通过 cloud9 命令提示符访问它。

documentDB 集群是两个安全组的一部分。第一个安全组称为 vpc默认安全组demoDocDB,第二个称为defaultvpc 默认安全组。

demoDocDB用于将请求从 cloud9 实例转发到运行我的 documentDB 数据库的端口 27017 的入站规则。

安全组的入站规则defualt指定所有流量、所有端口范围及其自身的来源。VPC ID 是默认的 VPC 设置。

在 lambda 中编辑 VPC 详细信息时,我输入了:

  1. VPC - 默认 VPC
  2. 子网 - 选择所有 3 个可用子网
  3. 安全组 - defaultVPC 的安全组

该函数在写入数据库时​​工作了两次,其余时间都超时了,Lambda 函数的超时时间为 2 分钟,但在达到该超时时间之前,它将抛出超时错误。

[ERROR] ServerSelectionTimeoutError: MY_DATABASE_URL:27017: [Errno -2] Name or service not known
Run Code Online (Sandbox Code Playgroud)

下面的代码片段是尝试执行的代码,该函数永远不会print("INSERTED DATA")在插入语句期间达到超时。

def getDBConnection():
    client = pymongo.MongoClient(***MY_URL***) 

    ##Specify the database to …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo aws-lambda aws-documentdb

2
推荐指数
1
解决办法
7304
查看次数

MongoDB/DocumentDB bson_append_array():检测到无效数组。数组参数的第一个元素不为“0”

最近,我将我的一个项目 (PHP 7.4/Lumen/Ubuntu 20.04) 从 MongoDB 迁移到 MongoDB 兼容的 AWS DocumentDB。自迁移以来,所有 CLI 脚本都会触发此奇怪的通知/警告

bson_append_array(): invalid array detected. first element of array parameter is not "0".
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

除了这条消息之外,一切似乎都能正常工作(即使我将所有 PHP 错误都隐藏在 ini 文件中,但它仍然显示出来)。不太确定发生了什么事。

消息实际上来自“find”方法。我也尝试过抑制该消息,但没有成功。

有谁知道这里发生了什么事吗?感谢您提前做出的所有回复。

  • 文档数据库版本 4.0
  • PHP SDK Composer 版本 1.9.0

php mongodb laravel lumen aws-documentdb

2
推荐指数
1
解决办法
1819
查看次数

MongoNetworkError:首次连接时无法连接到服务器 [amazonaws.com:27017] [错误:无法获得本地颁发者证书

我在 Apache 配置文件中有我的 mongo 详细信息。并收到此错误。

SetEnv MONGO_URL mongodb://:@XXXXXXXXX.docdb.amazonaws.com:27017/?ssl=true&ssl_ca_certs=/home/ec2-user/rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false

        App 2291 output: MongoNetworkError: failed to connect to server [XXXXXX.docdb.amazonaws.com:27017] on first connect [Error: unable to get local issuer certificate
        App 2291 output:     at TLSSocket.onConnectSecure (_tls_wrap.js:1474:34)
        App 2291 output:     at TLSSocket.emit (events.js:310:20)
        App 2291 output:     at TLSSocket.EventEmitter.emit (domain.js:482:12)
        App 2291 output:     at TLSSocket._finishInit (_tls_wrap.js:917:8)
        App 2291 output:     at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:687:12) {
        App 2291 output:   name: 'MongoNetworkError',
        App 2291 output:   [Symbol(mongoErrorContextSymbol)]: {}
        App 2291 output: }]
Run Code Online (Sandbox Code Playgroud)

MongoNetworkError: [错误: 无法获得本地颁发者证书

amazon-ec2 mongodb apache2.2 aws-documentdb

1
推荐指数
1
解决办法
1377
查看次数

无法在本地使用 NodeJS 连接到 AWS DocumentDB

我按照此处的说明设置了 SSH 隧道以进行外部连接: https: //docs.aws.amazon.com/documentdb/latest/developerguide/connect-from-outside-a-vpc.html

一旦建立了隧道,我就可以使用 GUI 客户端 Robomongo 和“Studio 3T”进行连接。这样就验证了 ec2 机器确实具有访问权限并且我的 SSH 隧道正在工作。

但尽管如此,NodeJS 对这种连接并不满意。根据我的配置,我收到两个错误之一。

配置1:

const url = 'mongodb://root:some-password@localhost:27017?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred';
const ca = [fs.readFileSync('./rds-combined-ca-bundle.pem')];
const options = {
    sslValidate: false, // you will see why in the next config
    sslCA: ca,
    useNewUrlParser: true,
    useUnifiedTopology: true,
};
const client = new MongoClient(url, options);
Run Code Online (Sandbox Code Playgroud)

几秒钟后我得到:

(node:7640) UnhandledPromiseRejectionWarning: MongoServerSelectionError: connect ENETUNREACH 172.31.26.210:27017
    at Timeout._onTimeout (/Volumes/foo/source/node_modules/mongodb/lib/core/sdam/topology.js:430:30)
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)
Run Code Online (Sandbox Code Playgroud)

配置2:

const url = 'mongodb://root:some-password@localhost:27017?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred';
const ca = [fs.readFileSync('./rds-combined-ca-bundle.pem')];
const …
Run Code Online (Sandbox Code Playgroud)

mongodb amazon-web-services node.js aws-documentdb

1
推荐指数
1
解决办法
2362
查看次数

Pymongo 连接到 DocumentDB 集群

为了以编程方式将 python 连接到本地环境中的 AWS DocumentDB(AWS 版本的 MongoDB)实例,我遇到了一些问题。我们尝试了以下步骤:

  1. 为了开始我们的实验,我们使用推荐的 AWS 教程来创建 python 连接: https: //docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html。

  2. 由于我们希望最初在本地进行设置,因此我们使用以下命令与集群建立 SSH 连接: ssh -i "example.pem" -L 27019:docdb.cluster-XXXXXXX.region.docdb.amazonaws.com:27017 ec2 -user@ec2-XXX-XXX-XXX-XXX.region.compute.amazonaws.com -N -v 此命令运行良好,我们能够创建隧道并将本地端口 27019 连接到我们的集群。与此相关的一个重要注意事项是,为了到达集群,我们必须激活 VPN 网络。

  3. 我们调整了代码以连接到本地端口:

    from pymongo import MongoClient,ReadPreference
    import urllib
    import ssl
    
    username=urllib.parse.quote_plus("username")
    password=urllib.parse.quote_plus("password")
    port=27019
    host="localhost"
    dbName="general"
    
    
    dbUri = f'mongodb://{username}:{password}@{host}:{port}/?tls=true&tlsCAFile=./rds-combined-ca-bundle.pem&retryWrites=false'
    print(dbUri)
    
    client = MongoClient(dbUri)
    print(client.list_database_names())
Run Code Online (Sandbox Code Playgroud)

运行上面的例子我们得到错误:

pymongo.errors.ServerSelectionTimeoutError: hostname '127.0.0.1' doesn't match either of 'docdb.XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-ro-XXXXXXX.region.docdb.amazonaws.com', Timeout: 30s, Topology Description: <TopologyDescription id: 61e7f8c811a815088e97e5a7, topology_type: Unknown, servers: [<ServerDescription ('127.0.0.1', 27019) server_type: Unknown, …
Run Code Online (Sandbox Code Playgroud)

python mongodb amazon-web-services pymongo aws-documentdb

1
推荐指数
1
解决办法
5727
查看次数

如何从本地node.js连接amazon documentDB

如果我的node.js应用程序位于基于此页面的ec2实例中,我可以连接到documentDB:https://docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html

但是,如果我从本地电脑运行 Node.js 应用程序,是否可以连接到 documentDb?

编辑: 这是我的一些带有示例连接字符串的代码。我使用猫鼬进行连接。

const connectionString = 'mongodb://user:password@sampledb.cluster-asdf.ap-northeast-1.docdb.amazonaws.com:27017/mydb?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';

mongoose.Promise = bluebird;
mongoose.connect(connectionString, {
    useMongoClient: true,
    reconnectTries: 1000,
    autoReconnect: true,
    connectTimeoutMS: 99999,
  }
);
Run Code Online (Sandbox Code Playgroud)

node.js aws-documentdb

0
推荐指数
1
解决办法
4403
查看次数