从AWS Glue,SSL问题连接到Postgres Heroku数据库

时间:2018-05-03 03:09:04

标签: postgresql amazon-web-services ssl aws-glue

我试图连接到我的Heroku数据库,而且我收到了与SSL相关的以下一系列错误:

SSL connection to data store using host matching failed. Retrying without host matching.
SSL connection to data store failed. Retrying without SSL.
Check that your connection definition references your JDBC database with correct URL syntax, username, and password. org.postgresql.util.PSQLException: Connection attempt timed out.

我设法使用DBeaver连接到数据库并遇到类似的SSL问题,直到我将SSL工厂设置为org.postgresql.ssl.NonValidatingFactory,但Glue没有提供任何SSL选项。

数据库实际上托管在AWS上,连接URL为:

jdbc:postgresql://ec2-52-19-160-2.eu-west-1.compute.amazonaws.com:5432/something

(例如,AWS Glue论坛没用!他们似乎没有回答 anyones 问题)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,看来问题是Heroku需要比Amazon需要的JDBC驱动程序更新的JDBC驱动程序。看到这个线程:

AWS Data Pipelines with a Heroku Database

另外,看来您可以直接从python脚本使用jbdc。看到这里:

https://dzone.com/articles/extract-data-into-aws-glue-using-jdbc-drivers-and

因此,您似乎需要下载一个新的驱动程序,将其上传到s3,然后按如下所述在脚本中手动使用它:

https://gist.github.com/saiteja09/2af441049f253d90e7677fb1f2db50cc

祝你好运!

更新:我能够在Glue Job中使用以下代码片段连接到数据。我必须将Postgres驱动程序上传到S3,然后将其添加到我的Glue Job的路径中。另外,请确保Jars是公共的,或者您已配置IAM用户的策略,以便他们可以访问存储桶。

%pyspark
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.transforms import *

glueContext = GlueContext(SparkContext.getOrCreate())

source_df = spark.read.format("jdbc").option("url","jdbc:postgresql://<hostname>:<port>/<datbase>“).option("dbtable", “<table>”).option("driver", "org.postgresql.Driver").option("sslfactory", "org.postgresql.ssl.NonValidatingFactory").option("ssl", "true").option("user", “<username>”).option("password", “<password>”).load()

dynamic_dframe = DynamicFrame.fromDF(source_df, glueContext, "dynamic_df")