AWS Клей Python Оболочка соединения с Oracle - PullRequest
0 голосов
/ 14 апреля 2020

Во время работы AWS Клей Python оболочка (без использования Spark) я хочу соединиться с Oracle. Я успешно выполнил все вещи (описанные в ссылке ниже) в dev_endpoint или в моей виртуальной машине, но моя цель - получить AWS Glue Python Shell. Соединение с Oracle cx_ Oracle проблема с AWS Клей Python Оболочка

Все библиотеки в AWS Клей Python Оболочка должна иметь вид .whl или. яичные пакеты - тогда они установлены. Но AWS Клей без сервера, и я не смог найти, где они были установлены - так что я мог правильно установить rpath.

Как узнать absolute_path_to_library_dir?

1 Ответ

0 голосов
/ 15 апреля 2020

Поскольку клей не содержит сервера, /path/to/library/dir отсутствует.

python процессам в glue требуется несколько вещей для подключения к внешним базам данных, таким как ваш oracle сервер.

  1. python библиотеки должны быть упакованы как .egg или .whl, загруженные на s3, и местоположение этих файлов должно быть указано при создании задания (поле Python Library Path). это относится к любой библиотеке, которую вы создаете или которую вы обычно pip install, но они недоступны в среде, которую aws предоставляет для процессов склеивания . Поэтому вам нужно будет создать .egg для cx_Oracle локально, загрузить на s3 и указать путь в Python Library Path при создании вашей работы. Если вы уже создали задание, вы можете отредактировать задание и предоставить секретные данные s3-path-to-cs-oracle.egg

  2. , такие как учетные данные подключения, из безопасной внешней службы с помощью сценария etl. Одним из вариантов является сохранение учетных данных oracle в клей. Из aws клеевой консоли go к соединениям добавьте соединение jdb c и сохраните свои учетные данные базы данных.

  3. В своем сценарии etl используйте boto3. client ('glue'). get_connection для получения сведений о соединении и, используя загруженную пользователем библиотеку cx_Oracle, подключитесь к базе данных. Вот пример фрагмента, который вам нужно будет адаптировать и включить в ваш скрипт etl

сниппет:

import boto3
import cx_Oracle as orcl

glue = boto3.client('glue')
resp = glue.get_connection(Name='my-oracle-connection')
props = resp['Connection']['ConnectionProperties']
dsn = props['JDBC_CONNECTION_URL'].split('//')[-1]
user = props['USERNAME']
pw = props['PASSWORD']
db = orcl.connect(user, pw, dsn)
#^ `db` should be a connection to your oracle db
...