AWS Glue 连接MongoDB Atlas故障求助 求可落地的成功对接实操步骤
AWS Glue 对接 MongoDB Atlas 可复现操作流程
前置准备
- 运行状态正常的 MongoDB Atlas 集群,集群版本选 4.4 及以上,低版本的协议适配会有额外兼容问题
- 提前在 Atlas 中创建具备目标库读/写权限的专用数据库账号,留存账号密码、集群完整连接串、待访问的数据库与集合名称
操作步骤
1. 配置 Atlas 网络放行规则
- 进入 Atlas 控制台的「Network Access」配置页,不要直接配置
0.0.0.0/0放开全网访问——这种做法安全风险极高,不要图省事直接用。需将部署 Glue 服务的 AWS 对应区域的 Glue 服务出口 IP 段全部加入白名单 - 配置完成后通过 Atlas 自带的连通性检测工具,验证对应 IP 段的访问状态为可达
注意:不要仅将个人办公电脑的 IP 加入白名单,Glue 作业运行时的流量出口为 AWS 服务节点,不会走你的本地办公网络,这么配100%连不通
2. 准备适配版本的驱动包
- 获取 3.12.x 版本的 MongoDB 官方 Java 驱动 JAR 包,上传到和 Glue 作业同区域的 S3 桶中,记录 JAR 包的完整路径
踩坑提醒:4.x 版本的驱动和 Glue 4.0 内置的 Spark 生态存在兼容性断层,是绝大多数对接失败的核心诱因,不要盲目使用最新版驱动
3. 创建 Glue 连接
- 进入 AWS Glue 控制台,新建连接时连接类型选择通用 JDBC,不要直接选择控制台预置的 MongoDB 自定义连接器模板——该模板存在参数校验 bug,绝大多数场景下无法通过连通性测试
- 连接参数按以下规则填写:
- 连接地址:将 Atlas 提供的标准连接串去掉末尾附带的数据库参数部分,补充固定参数
?authSource=admin&ssl=true&retryWrites=false形成完整URL - 认证信息:填写提前创建的 Atlas 专用数据库账号与密码
- 额外依赖配置:填写 S3 中存储的 3.12.x 版本 MongoDB 驱动 JAR 路径
- 连接地址:将 Atlas 提供的标准连接串去掉末尾附带的数据库参数部分,补充固定参数
- 网络配置环节,选择和 Glue 作业同 VPC 的安全组,配置安全组出站规则放开 443 端口的全部出站权限(Atlas 默认通过 443 端口提供兼容 MongoDB 协议的TLS加密服务)
- 触发连接连通性测试,显示测试通过后保存连接配置
关键参数说明:连接URL中必须携带retryWrites=false配置项,Atlas默认开启的写重试逻辑会和Glue的Spark作业握手流程冲突,直接触发连接超时报错,这是官方文档没有明确提及的隐性适配要求
4. 配置并测试 Glue 作业
- 新建 Glue 4.0 版本的 Spark 作业,在作业的依赖配置项中关联之前创建的 Glue 连接,同时再次关联 S3 中的 MongoDB 驱动 JAR 包
- 在作业的高级配置中添加两个必配参数:
- 作业类名指定为
com.mongodb.spark.sql.DefaultSource - 自定义conf参数添加
spark.driver.extraJavaOptions=-Djava.version=11
- 作业类名指定为
- 编写最小化测试脚本,验证读写能力,示例脚本片段:
mongo_df = spark.read.format("com.mongodb.spark.sql.DefaultSource") \ .option("uri", "<Atlas完整连接串>") \ .option("database", "<目标数据库名>") \ .option("collection", "<目标集合名>") \ .load() mongo_df.show(5)
常见对接失败排查点
- 白名单仅配置了本地办公IP,未放行Glue服务的出口IP段,导致连接请求被Atlas侧拦截
- 驱动版本错配,使用了4.x版本的MongoDB驱动,触发类找不到、方法不存在的兼容报错
- 连接串未添加
retryWrites=false参数,握手阶段超时失败 - 关联的安全组未放开443端口出站权限,导致Glue节点无法和Atlas集群建立TLS连接
- 直接使用Glue控制台预置的MongoDB连接器模板,模板默认未开启ssl配置,被Atlas的强制加密访问策略拦截
内容的提问来源于stack exchange,提问作者hakiy53658
相关产品推荐
相关产品推荐

