我正在尝试在 AWS Glue 中添加 Amazon RDS (Postgres 15) 连接:
我的 JDBC URL 是
jdbc:postgresql://xxx.xxx.us-west-2.rds.amazonaws.com:5432/my_db
我可以在 pgAdmin 4 中成功连接。
但是,当我通过
测试此连接时我“失败”了。
我正在使用的 IAM 角色甚至具有 AmazonRDSFullAccess:
当我单击“查看日志”按钮时,错误日志并没有多大帮助。 AWS 似乎在解析错误时遇到问题:
ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
这是我的安全组配置。基本上入站和出站规则都允许所有流量:
安全组-入站规则:
安全组-出站规则:
我想知道还有什么可能导致此连接问题?谢谢!
该问题是由 AWS Glue 使用旧的 JDBC 驱动程序引起的。所以我必须手动上传最新的驱动程序。
在 https://jdbc.postgresql.org/download/下载最新的 JDBC 驱动程序 截至今天,我下载了最新的 JDBC 驱动程序 42.6.0 Java 8 版本,文件名是
postgresql-42.6.0.jar
.
然后我上传到
s3://my-bucket/aws-glue/postgresql-jdbc-driver/postgresql-42.6.0.jar
在 AWS Glue -> 连接器中更新您的 JDBC 连接
org.postgresql.Driver
s3://my-bucket/aws-glue/postgresql-jdbc-driver/postgresql-42.6.0.jar
为了使用我自己的 JDBC 驱动程序,我需要向 IAM 角色添加以下权限:
CreateJob
,
DeleteJob
、GetJob
、GetJobRun
、StartJobRun
。iam:PassRole
。s3:DeleteObjects
,
s3:GetObject
、s3:ListBucket
、s3:PutObject
。默认的
AWSGlueServiceRole
策略有 CreateJob
、DeleteJob
、GetJob
、GetJobRun
、StartJobRun
。所以我只需要提供对我创建的新策略的其余访问权限:AWSGlueServiceRole-MyPolicy
现在 IAM 角色应该具有
默认
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::my-bucket/aws-glue/postgresql-jdbc-driver/postgresql-42.6.0.jar",
"arn:aws:s3:::my-bucket"
]
},
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::xxxxxxxxxxxx:role/service-role/AWSGlueServiceRole-xxx"
]
}
]
}
AWSGlueServiceRole
原因:com.amazonaws.services.glue.exceptions.InvalidInputException:当前不支持测试与自定义驱动程序的连接。 原因:com.amazonaws.services.glue.exceptions.InvalidInputException:当前不支持测试与自定义驱动程序的连接。
不过,爬虫应该会成功!