使用aws lamda函数访问mongo atlas集合

问题描述 投票:0回答:1

我正在使用我的 aws lamda 访问 mongo db 集合。我已将 mongo srv uri 连接设置为 lamda 环境变量并使用 mongodb-driver-sync 依赖项。

    public class JobStatusEventHandler implements RequestHandler<SNSEvent, Boolean> {
        
        public JobStatusEventHandler() {
                mongoClient = MongoClients.create(System.getenv("MONGODB_URI"));
            }
        
        @Override
            public Boolean handleRequest(SNSEvent snsEvent, Context context) {
                   MongoDatabase database = mongoClient.getDatabase("docdb");
                   logger.log("database " + database.getName());
                   MongoCollection<Document> collection = database.getCollection("jobs");
                   logger.log("collection: "+ collection.countDocuments());
          }
        
        
 }

问题是它打印数据库名称,但当尝试执行集合方法时,它会给出

java.net.SocketTimeoutException: Connect timed out
错误。

我也将 aws nat 网关 ips 列入了 aws 网络 IP 访问列表中的白名单。

连接成功并且还记录了数据库名称,这怎么可能?

java mongodb spring-boot aws-lambda
1个回答
0
投票

client
实例的创建、带有
getDB
的数据库和带有
getCollection
的集合实际上并没有与Mongo建立连接。这会延迟到真正需要在 Mongo 上运行的第一个命令为止。就您而言,那就是
collection.countDocuments()

因此,如果您将

database.getCollection("jobs")
database.getCollection("jobs").countDocuments()
的日志分开,您会发现它对
getCollection()
有效,但对
countDocuments()
失败。此时实际上已经建立了与 Mongo 的连接,但无法连接。

© www.soinside.com 2019 - 2024. All rights reserved.