Подключение к Postgres Heroku DB из AWS Glue, проблема SSL - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь подключиться к своей базе данных 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 голосов
/ 26 ноября 2018

У меня возникла та же проблема, и кажется, что проблема в том, что Heroku требует более нового драйвера JDBC, чем тот, который требуется Amazon. Смотрите эту тему:

Конвейеры данных AWS с базой данных Heroku

Также кажется, что вы можете использовать jbdc непосредственно из ваших скриптов на python. Смотрите здесь:

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

Похоже, вам нужно скачать новый драйвер, загрузить его на s3, а затем вручную использовать его в своих скриптах, как указано здесь:

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

Удачи!

ОБНОВЛЕНИЕ: я смог использовать следующий фрагмент кода в работе склеивания для подключения к данным. Мне пришлось загрузить драйвер Postgres на S3, а затем добавить его в путь к моей работе с клеем. Также убедитесь, что файлы Jar общедоступны или вы настроили политику пользователя 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")
...