首页 > 解决方案 > AWS Glue Python Shell 与 Oracle 的连接

问题描述

在运行 AWS Glue Python shell(不使用 Spark)时,我想连接 Oracle。我在 dev_endpoint 或我的虚拟机中成功地完成了所有的事情(在下面的链接中描述),但我的目标是拥有它 AWS Glue Python Shell。 AWS Glue Python Shell 与 Oracle cx_Oracle 的连接问题

AWS Glue Python Shell 中的所有库都必须以 .whl 或 .egg 包的形式提供 - 然后安装它们。但是 AWS Glue 是无服务器的,我无法找到它们的安装位置 - 因此我可以正确设置 rpath。

如何知道 absolute_path_to_library_dir?

标签: pythonoracleamazon-web-servicesaws-glue

解决方案


由于胶水是无服务器的,因此没有/path/to/library/dir.

胶水中的 python 进程需要一些东西来连接到外部数据库,比如你的 oracle 服务器。

  1. python库必须打包成.eggor .whl,上传到s3,创建job时必须指定这些文件的位置(字段Python Library Path)。这适用于您创作的任何库或您通常会使用的任何库,pip install但这些库在 aws 为粘合过程提供的环境中不可用。因此,您需要在本地构建一个.eggfor cx_Oracle,上传到 s3,并在Python Library Path创建作业时提供路径。如果您已经创建了作业,您可以编辑该作业并提供s3-path-to-cs-oracle.egg

  2. 必须通过 etl 脚本从安全的外部服务中获取连接凭证等机密信息。一种选择是将 oracle 连接凭据存储在胶水中。从 aws 胶水控制台,转到连接,添加 jdbc 连接并保存您的数据库凭据。

  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

推荐阅读