You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Glue脚本中不使用连接获取RDS(PostgreSQL)数据?

在AWS Glue脚本中直接访问RDS数据库的解决方案

可以直接通过JDBC在Glue脚本中访问RDS数据库,你的代码无法运行通常是因为初始化方式、驱动缺失、权限或网络配置问题,以下是修正方案:

一、前置配置

1. 添加PostgreSQL JDBC驱动

Glue默认不包含PostgreSQL驱动,需要手动添加:

  • 下载与RDS PostgreSQL版本匹配的JDBC驱动(例如postgresql-42.6.0.jar)
  • 上传到你的S3存储桶,然后在Glue作业的作业参数中添加:
    --extra-jars s3://你的桶名/路径/postgresql-42.6.0.jar
    

2. 配置权限与网络

  • IAM角色权限:确保Glue作业的执行角色拥有:
    • S3读取权限(用于访问JDBC驱动包)
    • RDS网络访问权限(通过安全组控制,或添加rds-db:connect权限)
  • RDS安全组:允许Glue作业所在VPC的安全组/IP访问RDS的端口(默认5432)

二、修正后的Glue脚本

import sys
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext

# 初始化Glue上下文与Job对象(Glue中无需手动创建SparkContext)
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# RDS连接配置
url = "jdbc:postgresql://<RDS域名>:<端口>/<数据库名>"
properties = {
    "user": "postgres",
    "password": "你的数据库密码",
    "driver": "org.postgresql.Driver"  # 必须指定驱动类
}

# 读取RDS表数据
df = spark.read.jdbc(url=url, table="<目标表名>", properties=properties)

# 示例:打印前10条数据
df.show(10)

# 提交作业
job.commit()

三、常见问题排查

  • 驱动类未指定:必须在properties中添加driver参数,否则Spark无法识别驱动
  • 网络连接失败:检查RDS安全组是否开放Glue所在VPC的访问权限,或Glue作业是否配置了VPC端点
  • 权限不足:确认IAM角色拥有S3读取驱动包的权限,以及RDS的连接权限
  • 版本不兼容:JDBC驱动版本需与RDS PostgreSQL版本匹配,避免因版本差异导致的连接错误

内容的提问来源于stack exchange,提问作者Akash Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:27:38