创建AWS Glue与DocumentDB连接失败的问题排查求助
解决AWS Glue连接DocumentDB报错(错误码30)的实操方案
1. 先修正URL格式,这是最常见的问题
AWS Glue对MongoDB兼容的URL有严格要求,DocumentDB的正确格式必须包含这些关键参数:
mongodb://<用户名>:<密码>@<集群端点>:27017/<认证数据库>?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred
- 必须显式添加
replicaSet=rs0:DocumentDB默认副本集名称就是rs0,Glue连接不指定的话会直接连接失败 - 认证数据库不能省略:如果你的用户是在
admin库创建的,URL里必须写/admin,不能只填目标业务数据库 - 密码含特殊字符要URL编码:比如密码里有
@、/这类字符,要转成%40、%2F这种编码格式
2. 检查网络与安全组配置
- 确认Glue连接使用的子网、安全组和DocumentDB集群在同一VPC,或已通过VPC peering打通网络
- DocumentDB的安全组要开放27017端口给Glue的安全组,别只开放了本地和Athena的IP范围
- Glue的子网要有直接指向DocumentDB的路由,别绕NAT网关(DocumentDB是VPC内服务,走公网连接会失败)
3. 权限与用户配置要匹配
- 用于连接的DocumentDB用户必须拥有目标数据库的读取权限,且用户要在对应的认证库创建(比如在admin库创建的用户,URL里的认证库就得是admin)
- 测试时可以先用超级用户(如root)尝试连接,排除权限不足的问题
4. SSL配置要保持一致
- 如果开启TLS:Glue连接里要启用SSL选项,同时URL里添加
ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem(Glue默认能识别AWS官方CA证书路径) - 如果关闭TLS:除了在DocumentDB集群设置中禁用TLS,还要在URL里添加
ssl=false,同时在Glue连接配置里关闭SSL选项,两边配置必须统一
5. 用Glue作业替代连接测试,获取详细日志
连接测试的报错信息过于模糊,直接写个简单的Glue作业测试,能在CloudWatch中查看具体错误:
import sys from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) # 替换为你的连接参数 conn_opts = { "uri": "mongodb://<用户名>:<密码>@<集群端点>:27017/admin?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0", "database": "你的目标数据库", "collection": "任意测试集合" } df = glueContext.create_dynamic_frame.from_options( connection_type="mongodb", connection_options=conn_opts ) df.printSchema()
运行后去CloudWatch的Glue日志中查看具体错误,比如副本集解析失败、认证超时等,便于定位问题
6. 确认Glue版本与DocumentDB兼容性
- 使用Glue 3.0及以上版本,对DocumentDB 4.0+的兼容性更好
- 旧版本Glue的Mongo驱动可能不支持DocumentDB的协议,容易出现无明确提示的连接失败
内容的提问来源于stack exchange,提问作者Shadowtrooper
相关产品推荐
相关产品推荐

