如何在AWS Glue/DataBrew中连接远程Firebird数据库开展ETL
Firebird接入AWS Glue排障与配置步骤
本地Python连接返回10061连接被拒绝时,优先解决服务端连通性问题,再处理Glue侧配置,顺序错误会反复触发无意义报错。
基础连通性修复
10061错误仅三类触发原因:服务未启动、端口未对外监听、防火墙拦截,按以下顺序排查:
- 登录运行Firebird的Windows服务器,打开服务管理器,确认Firebird对应服务处于运行状态。
- 打开Firebird安装目录下的
firebird.conf配置文件:- 找到
RemoteBindAddress项,要么直接注释该行(默认监听所有网卡地址),要么明确绑定服务器可被外部访问的IP,禁止绑定127.0.0.1 - 找到
RemoteServicePort项,确认端口值为3050,若自定义过端口,后续所有配置中的端口值需同步修改 - 修改完成后重启Firebird服务
- 找到
- 在Firebird服务器上执行
netstat -ano | findstr 3050,确认返回结果里存在0.0.0.0:3050或<服务器对外IP>:3050的LISTENING状态记录,若仅显示127.0.0.1:3050,返回上一步重新修改配置。 - 配置Firebird服务器的防火墙入站规则,放行TCP 3050端口,允许本地公网IP、Glue所在VPC网段的访问请求——注意规则配置在数据库所在服务器的防火墙上,而非本地操作机。
- 本地验证:在操作机上执行
telnet <Firebird公网IP> 3050,如果能连通不报错,再运行之前写的Python连接脚本,确认能正常建立连接、查询数据后,再进行Glue侧配置。
注:之前JDBC串和Python脚本里写的
C:\program files (x86)\...路径是数据库文件在Firebird服务器上的绝对路径,写法正确,无需调整。
AWS Glue 配置Firebird数据源步骤
之前直接创建JDBC连接测试失败、无有效日志,核心原因是Glue默认未内置Firebird的JDBC驱动,按以下步骤配置:
- 准备驱动:获取对应Firebird版本的Jaybird JDBC驱动包,选择适配JDBC 4.2及以上版本的jar包,不要选带本地原生依赖的版本。
- 将下载好的驱动jar包上传到Glue服务有权限访问的S3路径下,记录该路径。
- 网络配置前置检查:
- 若Firebird部署在AWS EC2上:Glue连接选择和EC2同VPC的私有子网,EC2关联的安全组添加入站规则,放行Glue连接绑定的安全组对TCP 3050端口的访问
- 若Firebird部署在IDC/其他云公网:给Glue任务运行的子网配置NAT网关或弹性公网IP,保证Glue网络能出网访问到Firebird的公网地址
- 新建JDBC连接:
- 进入Glue控制台 > 数据库 > 连接 > 新建连接,连接类型选择
JDBC - JDBC连接串填写:
jdbc:firebirdsql://<Firebird服务器IP>:3050/C:\program files (x86)\folder\database\dbname.FDB,串中的空格无需额外转义,驱动可正常识别 - 填写数据库用户名
sysdba和对应密码 - 额外配置项中,JDBC驱动类名填写
org.firebirdsql.jdbc.FBDriver - 驱动S3路径选择之前上传jar包的S3位置
- 选好已确认连通性的VPC、子网、安全组,保存连接
- 进入Glue控制台 > 数据库 > 连接 > 新建连接,连接类型选择
- 测试连接:选择后续ETL作业要使用的IAM角色发起测试,无需在连接测试页等待报错提示,直接去CloudWatch的
/aws-glue/test-connection日志组下找对应测试任务的日志流,可查看完整的驱动加载、连接报错细节。
AWS Glue DataBrew 适配说明
DataBrew目前不支持自定义上传JDBC驱动,无法直接连接Firebird。可先通过Glue ETL作业将Firebird的数据同步到S3、RDS、Redshift等DataBrew原生支持的存储,再用DataBrew做后续数据加工。

本地测试报错参考:
>>> conn = firebirdsql.connect( ... host='108.xxx.xxx.xxx', ... database="c:/program files (x86)/folder1/database/datab.fdb", ... user='sysdba', ... password='masterkey', ... timeout=50 ... ) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Scripts\lib\site-packages\firebirdsql\__init__.py", line 95, in connect conn = Connection(**kwargs) File "C:\Users\Scripts\lib\site-packages\firebirdsql\fbcore.py", line 641, in __init__ self.sock = SocketStream(self.hostname, self.port, self.timeout, cloexec) File "C:\Users\Scripts\lib\site-packages\firebirdsql\socketstream.py", line 46, in __init__ self._sock = socket.create_connection((host, port), timeout) File "C:\Program Files\Python39\lib\socket.py", line 844, in create_connection raise err File "C:\Program Files\Python39\lib\socket.py", line 832, in create_connection sock.connect(sa) ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
内容的提问来源于stack exchange,提问作者user10951045
相关产品推荐
相关产品推荐

