python - 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?
解决方案
由于胶水是无服务器的,因此没有/path/to/library/dir
.
胶水中的 python 进程需要一些东西来连接到外部数据库,比如你的 oracle 服务器。
python库必须打包成
.egg
or.whl
,上传到s3,创建job时必须指定这些文件的位置(字段Python Library Path
)。这适用于您创作的任何库或您通常会使用的任何库,pip install
但这些库在 aws 为粘合过程提供的环境中不可用。因此,您需要在本地构建一个.egg
forcx_Oracle
,上传到 s3,并在Python Library Path
创建作业时提供路径。如果您已经创建了作业,您可以编辑该作业并提供s3-path-to-cs-oracle.egg
必须通过 etl 脚本从安全的外部服务中获取连接凭证等机密信息。一种选择是将 oracle 连接凭据存储在胶水中。从 aws 胶水控制台,转到连接,添加 jdbc 连接并保存您的数据库凭据。
在您的 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
推荐阅读
- ios - 无法正确读取从 UIView 创建的 UIImage 的颜色数据
- javascript - MySQL查询更新和SQLite的问题
- javascript - 如何从输入字段中获取数值到 Bootstrap 模式?
- vb.net - DataGridView 文本导出到 CSV
- tomcat - 在 Tomcat 上运行 Errai 时如何启用热重载?
- php - 在 WooCommerce 中基于重量计算价格的产品价格后缀
- flutter - 动态减小小部件的大小?
- unity3d - 多层次的导航网格烘焙
- python - 将 OR 语句与 Python SLY 结合使用
- rest - 使用 jersey 和 swagger 对 post body 进行 api 验证