- 数据工程
- 数据编排
- ETL
- 任务调度
- 批处理
- 流处理
- 数据集成
- 后端
【免费下载链接】mage-ai
🧙 Build, run, and manage data pipelines for integrating and transforming data.
MongoDB Atlas 是 MongoDB 官方提供的云托管服务,支持部署在 AWS 等云平台上,适合作为数据集成管道(tap)的远程测试目标。本文基于 mage-ai 仓库中 MongoDB 数据源的实际探索记录(atlas_setup.md),系统讲解 Atlas 集群选型、环境隔离方案、命令行连接方法,并结合 MongoDB 数据源源码 说明连接参数与底层实现,帮助读者快速搭建可用于开发与 CI 的远程 MongoDB 测试环境。
一、为什么选择 MongoDB Atlas 作为测试环境
对于需要持续验证 MongoDB 数据源(Mage 数据集成中的 Source)的团队来说,需要一个稳定、可复用、接近真实生产形态的 MongoDB 实例。Atlas 的优势在于:
- 托管在云上(文中记录为可托管于 AWS),无需自行维护服务器;
- 提供从免费到付费的多个集群层级,可按成本灵活选择;
- 有专门面向"项目(Project)"的环境隔离模型,适合为 dev、CI(circle)等不同环境分配独立集群。
与此相对,仓库探索记录中还评估过两种替代方案(详见 atlas_setup.md 末尾的 "Other Options Considered"):
- 本地部署 MongoDB 服务器:维护成本高,尤其在 CI 场景下引入额外运维负担;
- 在 AWS 上自行搭建 Mongo Stack:需要占用 EC2 实例,成本显著更高(原记录估算约为每年 12,000 美元)。
相比之下,Atlas 在成本、运维复杂度和多环境隔离能力上更适合作为数据源测试环境。
二、Atlas 集群层级(Tier)选型对照
探索记录中给出了完整的集群层级对照表,各层级的资源规格与月度价格如下:
| 层级 | RAM | 存储 | vCPU | 价格/月 |
|---|---|---|---|---|
| M0 | 共享 | 512 MB | 共享 | 免费 |
| M2 | 共享 | 2 GB | 共享 | $9 |
| M5 | 共享 | 5 GB | 共享 | $25 |
| M10 | 2 GB | 10 GB | 1 vCPU | ~$58 |
| M20 | 4 GB | 20 GB | 2 vCPU | ~$144 |
选型要点:
- M0完全免费,适合功能验证、连通性测试、冒烟测试等低负载场景;
- M2 / M5共享层级,价格适中,适合常规开发与持续集成;
- M10 / M20独享资源,适合承载更接近生产的测试数据量或并发连接测试。
共享层级的限制
M0、M2 和 M5 这三个共享层级存在以下已知限制,选型时必须考虑:
- 每个账号只能创建一个 M0 免费集群,因此免费层只能承载单一环境;
- 只能使用 MongoDB 4.0 版本(以原记录时的测试结论为准,版本策略细节可参见 supported_versions_spike.md);
- 无法自定义内存或存储大小,规格由 Atlas 统一管理。
这些限制意味着:如果测试依赖特定 MongoDB 版本或需要更大存储,就需要使用 M10 及以上的付费层级。另据仓库中的版本探索记录,M10(付费)集群可以选择 MongoDB 版本,而免费及共享层级默认使用最新版本,因此需要多版本矩阵测试时,往往要借助付费集群。
三、多环境下的集群组织方案
探索记录提出了三种可行的环境组织方式:
- 单个集群、多个数据库:用一个集群承载 dev 与 circle(CI),通过不同 database 隔离。Atlas 单集群最低支持 100 个并发连接,一般开发场景足够;
- dev 与 CI 各用一个集群:物理隔离,避免互相干扰;
- 使用 Atlas Project(项目):Atlas 的 Project 就是为"独立、隔离的环境"设计的,官方推荐将项目视为环境隔离的单位。
最终的推荐实践是:为 dev 与 circle 分别创建独立的 Project,每个 Project 内各建一个集群。这样做的好处是:
- 环境之间完全隔离,误操作不会相互影响;
- 后续如果需要新增环境(如 dev-tap-tester、harrison-tap-tester 等),只需按同样的模式再建 Project 即可;
- 避免多环境共用一个集群时可能出现的资源竞争或连接数冲突。
这套"一环境一项目一集群"的模型,与仓库中 MongoDB 数据源按database配置读取数据的模型天然契合——每个隔离的测试环境都可以配置独立的连接参数。
四、通过 Mongo Shell 连接 Atlas
1. 安装 MongoDB 社区版
要获得mongoshell,需要先在本机安装 MongoDB Community Edition。按官方安装指南在 Ubuntu 上安装即可,安装包会同时带来 mongo shell 及其他配套模块。对应到仓库内的探索记录,本地完整搭建(含认证与副本集配置)可参考 local_mongo_setup.md。
2. 使用连接串连接集群
连接 Atlas 集群推荐使用mongodb+srv://形式的连接串(SRV 记录会自动解析到集群的全部节点)。原记录中使用的连接命令形如:
mongo "mongodb+srv://<cluster-host>.mongodb.net/test" -u <username> -p <password>其中:
<cluster-host>是 Atlas 控制台提供的集群主机名(例如stitch-upwjw这类内部测试集群,实际使用时应替换为自己集群的 host);/test是认证后的默认数据库路径;-u <username>/-p <password>为数据库用户凭证。
连接成功后即可执行常规的数据库操作,用于验证数据源能否正常读写目标数据库。
五、连接配置在数据源实现中的对应关系
Atlas 连接方式并非只适用于 shell,仓库中的 MongoDB Source 实现会以完全一致的连接参数接入 Atlas。在 templates/config.json 中,基础配置模板如下:
{ "database": "", "host": "", "password": "", "port": 27017, "user": "" }而 MongoDB 数据源 README 给出了完整的配置键说明:
| 配置键 | 说明 | 示例值 |
|---|---|---|
database | 要读取数据的数据库名 | company |
host | 数据库主机名 | 127.0.0.1 |
password | 访问数据库的用户密码 | abc123... |
port | 数据库端口(默认 27017) | 27017 |
user | 访问数据库的用户名 | admin |
replica_set | 副本集名称 | 可选 |
ssl | 设为true时使用 SSL 连接 | false(默认值) |
authSource | 覆盖默认数据库名以完成集群认证 | the_database(可选) |
authMechanism | 指定 MongoDB 集群的连接认证机制 | SCRAM-SHA-256(默认 None) |
这些参数与 Atlas 场景的对应关系非常明确:托管集群一律需要ssl: true,认证通常依赖authSource与authMechanism。
底层连接实现
在 tap_mongodb/init.py 的build_client函数中,可以看到这些配置如何被组装成 pymongo 客户端:
connection_params = { 'host': config['host'], 'port': int(config['port']), 'username': config.get('user', None), 'password': config.get('password', None), 'ssl': use_ssl, 'replicaset': config.get('replica_set', None), 'readPreference': 'secondaryPreferred', } if config.get('authSource'): connection_params['authSource'] = config.get('authSource') if config.get('authMechanism'): connection_params['authMechanism'] = config.get('authMechanism')几个实现细节值得注意:
readPreference固定为secondaryPreferred:从库可读,主库优先,这与 Atlas 副本集架构配合良好,可降低主节点压力;authSource/authMechanism为可选:仅在配置了对应键时才传入连接参数;Atlas 集群通常需要设置认证源数据库与认证机制;ssl_cert_reqs仅在启用 SSL 时生效:默认校验证书(verify_mode默认'true'),当ssl为true且verify_mode为'false'时可禁用证书校验;- 连接成功后会打印 MongoDB 服务端版本号,便于确认实际连到的版本(见 build_client 日志)。
仓库中的 pymongo_spike.py 还给出了另外两种 Atlas 连接方式的验证代码:
- 连接串方式:
pymongo.MongoClient("mongodb+srv://<user>:<password>@<host>/test"),需要安装dnspython包以解析 SRV 记录; - 连接参数方式:显式传入多个 shard 主机列表、
port=27017与ssl=True。
从源码结构看,这两种方式最终在build_client中统一收敛为"host + port + 认证参数"的连接模式,因此无论集群如何部署,配置层面对齐即可。
六、认证与权限的底层验证逻辑
连接 Atlas 之后,数据源并非直接盲目枚举所有数据库。在 tap_mongodb/init.py 中,get_roles与get_databases会先查询当前用户的角色,再据此决定可读取的数据库列表:
- 通过
usersInfo命令获取当前用户的角色; - 无
find权限的角色(如dbAdmin、userAdmin、clusterManager等)会被跳过; - 具备全库读取权限的角色(
readAnyDatabase、readWriteAnyDatabase、root)可以列出全部非系统数据库; - 否则仅能列出角色中被授予权限的数据库。
同时在发现阶段会忽略system、local、config等系统库(见 IGNORE_DBS)。这意味着在 Atlas 上为测试环境创建专用用户时,应当按最小权限原则授予其目标数据库的读取权限,例如readWriteAnyDatabase加对local库的只读权限(后者用于读取 oplog),这与 local_mongo_setup.md 中创建stitch_dev用户的方式一致。
七、其他被评估的方案对比
| 方案 | 成本 | 运维复杂度 | 结论(来自探索记录) |
|---|---|---|---|
| 本地 MongoDB 服务器 | 低(本机资源) | 高,尤其 CI 环境 | 开销较大,不作为首选 |
| AWS 自建 Mongo Stack(EC2) | 高(原记录估算约 $12,000/年) | 高 | 明显偏贵 |
| MongoDB Atlas | 免费起(M0),按需升级 | 低(托管) | 推荐方案 |
八、实践落地建议
综合探索记录与源码实现,落地一套基于 Atlas 的 MongoDB 测试环境时,建议按以下顺序操作:
- 创建 Atlas 项目:为 dev、CI 等每个环境分别创建独立 Project;
- 创建集群:低成本阶段选用 M0(功能验证)或 M2/M5(常规开发);需要指定版本或更大资源时升级到 M10+;
- 创建数据库用户:按最小权限原则授权目标数据库,必要时授予
local库只读权限以支持 oplog 增量同步; - 记录连接信息:从 Atlas 控制台获取集群 host、端口与认证配置;
- 配置数据源:将连接信息填入 templates/config.json 对应的
host、port、user、password、database,托管集群记得开启ssl,并按需设置authSource与authMechanism; - 验证连通性:先用
mongo "mongodb+srv://..."在 shell 中验证,再通过数据源的 discover/sync 流程做端到端验证。
通过这套流程,可以在不维护任何服务器的情况下,获得与生产形态一致的远程 MongoDB 测试目标,为数据源的开发、回归与 CI 验证提供稳定支撑。
- 数据工程
- 数据编排
- ETL
- 任务调度
- 批处理
- 流处理
- 数据集成
- 后端
【免费下载链接】mage-ai
🧙 Build, run, and manage data pipelines for integrating and transforming data.
相关推荐
Yii 2 测试环境搭建指南:基于 Codeception 的单元、功能与验收测试完整实践
Yii 2 测试环境搭建指南:基于 Codeception 的单元、功能与验收测试完整实践 导读 本篇技术指南以 Yii 2 官方测试文档为核心,系统讲解如何基
后端Web框架NPOI安全指南:防止Office文档处理中的潜在风险
NPOI安全指南:防止Office文档处理中的潜在风险 NPOI是一款强大的.NET库,用于读取和写入Microsoft Office二进制和OOXML文件格式
Jest 集成 MongoDB:基于 jest-mongodb Preset 的数据库测试实战指南
Jest 集成 MongoDB:基于 jest mongodb Preset 的数据库测试实战指南 本文是 Jest 官方文档中 MongoDB 集成指南( d
测试质量保障代码覆盖率开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考