AWS Glue连接EC2自托管MongoDB失败求助
以下是针对你的场景(网络层面已验证正常,MongoDB日志显示连接认证成功但Glue判定失败)的排查步骤:
检查MongoDB驱动版本兼容性
AWS Glue默认的MongoDB驱动版本可能与你的自托管MongoDB版本不兼容。比如Glue 3.0默认驱动对MongoDB 5.0+的某些协议支持有限,需手动指定驱动版本。在Glue连接的额外连接参数中添加:mongodb.driver.version=4.1.1(版本号可根据你的MongoDB版本调整,比如MongoDB 6.0建议用4.7+版本驱动)
验证SSL配置匹配
如果你的MongoDB未启用SSL,Glue连接可能默认开启了SSL验证导致握手失败。在连接参数中添加:ssl=false若MongoDB启用了SSL,需确保Glue连接配置了正确的CA证书(通过Glue连接的SSL证书参数上传)。
确认MongoDB用户权限完整性
虽然认证成功,但用户可能缺少Glue爬虫/作业所需的元数据读取权限。执行MongoDB命令检查用户权限:db.getUser("your-glue-user")确保用户拥有
listDatabases、find、listCollections等权限,可临时给用户分配readAnyDatabase角色测试是否解决问题。检查MongoDB绑定IP配置
确认MongoDB的bindIp配置未限制为localhost或仅公网IP。修改mongod.conf中的bindIp为私有IP或0.0.0.0,重启MongoDB服务:net: bindIp: 0.0.0.0延长连接超时时间
Glue默认超时时间可能过短,导致认证成功后元数据读取超时。在连接参数中添加:connectTimeoutMS=30000 socketTimeoutMS=60000排查MongoDB后续连接行为
仔细查看MongoDB日志中认证成功后的条目,是否存在disconnect或协议错误日志(如Invalid wire protocol version),这类信息能定位驱动协议不兼容的问题。验证Glue角色的VPC权限
确保Glue使用的IAM角色拥有以下权限:ec2:CreateNetworkInterfaceec2:DescribeNetworkInterfacesec2:DeleteNetworkInterfaceec2:DescribeSubnetsec2:DescribeSecurityGroups
这些权限是Glue在VPC内创建弹性网络接口(ENI)的必要条件。
内容的提问来源于stack exchange,提问作者Omisha gupta

