如何在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
相关产品推荐
相关产品推荐

