AWS Glue Scala-Spark任务同时连接PostgreSQL与S3出现连接超时问题
问题根因
你遇到的是Glue作业VPC网络配置与公网S3访问的冲突问题:
- 你的RDS PostgreSQL部署在私有VPC内,因此你给当前Glue作业配置了VPC访问权限(指定了VPC子网、安全组),才能正常拉取RDS数据
- 加入VPC的Glue作业节点默认不会分配公网IP,无法通过公网路由访问默认的S3公网端点
*.s3.amazonaws.com,因此触发连接超时 - 你之前能正常访问S3的其他作业,应该是没有配置VPC接入,或者对应VPC已经配置了S3访问通路
解决方案
你可以任选以下两种方案之一解决:
方案1:给Glue作业所在VPC配置S3网关端点(推荐,成本更低、性能更高)
- 进入AWS VPC控制台,找到Glue作业接入的VPC
- 在左侧菜单栏选择「端点」,点击「创建端点」
- 服务类别选择「AWS服务」,搜索
s3,选择类型为Gateway的S3服务端点 - 关联你Glue作业使用的子网所在的路由表,确保路由表中自动添加了S3网段的路由规则
- 给端点附加权限策略,允许访问目标S3存储桶即可
- 不需要修改任何Glue作业代码,配置完成后重新运行作业即可
方案2:给Glue作业所在的VPC子网配置公网访问通路
- 在VPC中创建Internet网关,绑定到Glue作业使用的VPC
- 修改Glue作业所在子网的路由表,添加默认路由
0.0.0.0/0指向Internet网关 - 确保Glue作业关联的安全组出站规则允许443端口的HTTPS访问
- 该方案适合作业同时需要访问其他公网服务的场景
额外验证项
- 检查Glue作业的安全组出站规则,确认没有限制443端口的出站访问
- 如果你用的是中国区AWS,注意S3端点域名是
*.s3.cn-[区域].amazonaws.com.cn,如果代码里硬写了全球区域名也会导致连接失败 - 不需要创建多个SparkSession,该问题和Spark实例配置无关,属于底层网络问题
内容的提问来源于stack exchange,提问作者Swapnil
相关产品推荐
相关产品推荐

