AWS Glue与Oracle R12测试连接成功但作业加载DynamicFrame时出现网络连接错误
你的问题很典型:Glue连接测试通过、爬虫能正常获取元数据,但Job执行时却无法建立网络连接——核心差异在于Glue爬虫和Job的运行环境、配置逻辑并不完全一致,结合你必须使用Glue连接(VPC需求)和Spark(Job Bookmark需求)的限制,你可以按以下步骤排查解决:
1. 检查Glue Job的VPC网络配置
Glue爬虫和Job的网络环境是分开配置的:
- 爬虫运行时会自动复用你创建连接时指定的VPC、子网和安全组,但Job需要你在Job配置页面手动指定完全一致的网络参数
- 确认Job配置:
- 已勾选「使用VPC」选项
- 子网选择和Glue连接匹配的子网(必须是能访问Oracle实例的子网)
- 安全组允许出站访问Oracle的1000端口(同时要确保Oracle实例的安全组允许该子网的入站流量)
- 另外,确保Job的执行角色拥有
ec2:CreateNetworkInterface、ec2:DescribeNetworkInterfaces、ec2:DeleteNetworkInterface权限,否则无法在VPC内创建网络接口用于连接
2. 修正Oracle JDBC连接字符串格式
你的连接字符串jdbc:oracle:thin://@xxx.xxx.xxx.xxx:1000:FOOBAR存在格式错误,标准Oracle Thin连接字符串有两种规范:
- 针对SID:
jdbc:oracle:thin:@host:port:SID - 针对服务名:
jdbc:oracle:thin:@//host:port/service_name
你当前的字符串多了一个斜杠(thin://@),需要改为:
- 如果FOOBAR是SID:
jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1000:FOOBAR - 如果FOOBAR是服务名:
jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1000/FOOBAR
Glue爬虫可能对格式错误有一定兼容性,但Job的Spark JDBC驱动对格式要求更严格,这会直接导致连接失败。你可以在Glue连接的「JDBC URL」中修正格式,之后重新爬取表(或直接更新Glue Data Catalog里的表属性)。
3. 补充Glue连接的JDBC属性配置
如果你的Oracle实例启用了SSL,需要在Glue连接的「JDBC属性」中添加额外配置,比如:
oracle.net.ssl_server_dn_match=false oracle.net.ssl_version=TLSv1.2
爬虫可能默认跳过了SSL验证,但Job的Spark驱动需要显式配置这些属性才能建立SSL连接。编辑Glue连接添加属性后,再重新测试Job。
4. 验证Glue Data Catalog表的连接关联
有时候爬虫生成的表可能没有正确关联Glue连接的VPC信息:
- 进入Glue Data Catalog的表详情页,查看「连接」字段是否关联了你创建的Oracle连接
- 如果没有,手动编辑表并选择对应的连接,确保Job能通过连接获取正确的VPC网络配置
5. 测试Job环境的网络连通性
如果以上步骤都没问题,可以在Job开头添加一段简单代码,验证Job所在环境能否访问Oracle实例:
import socket try: sock = socket.create_connection(("xxx.xxx.xxx.xxx", 1000), timeout=10) print("Successfully connected to Oracle port") sock.close() except Exception as e: print(f"Connection failed: {e}")
这段代码会直接测试TCP端口的连通性,如果失败,说明问题确实出在VPC/安全组的网络规则上,需要进一步排查防火墙、NACL等配置。
内容的提问来源于stack exchange,提问作者ck3mp

