如何从AWS Glue Python Shell连接到RDS实例?

时间:2019-05-01 13:12:28

标签: python amazon-web-services amazon-rds aws-glue

我正在尝试从AWS Glue访问RDS实例,我在EC2实例中运行了一些python脚本,并且我目前正在使用PYODBC进行连接,但是在尝试安排胶水作业时,我无法导入PYODBC,因为它不是本机的受AWS Glue支持,不确定驱动程序如何在胶壳中工作。

6 个答案:

答案 0 :(得分:2)

来自:在AWS Glue announcement中介绍Python Shell作业:

  

AWS Glue中的Python Shell作业支持与Python 2.7兼容的脚本,并预加载了Boto3,NumPy,SciPy,pandas等库。

module list不包含pyodbc模块,由于它依赖于libodbc.so.2pyodbc.so库,因此不能作为自定义.egg文件提供。

我认为您有2种选择:

  1. 从Glue的控制台中为数据库创建一个jdbc connection,并使用Glue的内部方法对其进行查询。这当然需要更改代码。
  2. 改为使用Lambda函数。您需要pack pyodbc和所需的库以及zip文件中的代码。有人已经为AWS Lambda编译了这些库,请参见here

希望有帮助

答案 1 :(得分:0)

对于AWS Glue,请使用Dataframe / DynamicFrame并指定SQL Server JDBC驱动程序。 AWS Glue在其环境中已经包含用于SQL Server的JDBC驱动程序,因此您无需添加任何带有胶粘作业的驱动程序jar。

df1 = spark.read.format(“ jdbc”)。option(“驱动程序”,“ com.microsoft.sqlserver.jdbc.SQLServerDriver”)。option(“ url”,url_src).option(“ dbtable”, dbtable_src).option(“ user”,userID_src).option(“ password”,password_src).load()

如果您使用的是SQL而不是表格:

df1 = spark.read.format(“ jdbc”)。option(“驱动程序”,“ com.microsoft.sqlserver.jdbc.SQLServerDriver”)。option(“ url”,url_src).option(“ dbtable”, (“ 此处的选择语句 ”)A).option(“ user”,userID_src).option(“ password”,password_src).load()

作为替代解决方案,您还可以在AWS Glue中运行的python脚本中使用用于SQL Server的jtds驱动程序

答案 2 :(得分:0)

我能够使用python库psycopg2,即使它不是用纯python编写的,也没有预装AWS胶python shell环境。这与aws胶水文档相反。因此,您可以以类似方式使用与odbc相关的python库。我为psycopg2库创建了.egg文件,并在粘胶python外壳环境中成功使用了它。如果脚本中包含import psycopg2,并且胶粘作业引用了相关的psycopg2 .egg文件,则以下是来自胶粘python shell的日志。

Creating /glue/lib/installation/site.py
Processing psycopg2-2.8.3-py2.7.egg
Copying psycopg2-2.8.3-py2.7.egg to /glue/lib/installation
Adding psycopg2 2.8.3 to easy-install.pth file
Installed /glue/lib/installation/psycopg2-2.8.3-py2.7.egg
Processing dependencies for psycopg2==2.8.3
Searching for psycopg2==2.8.3
Reading https://pypi.org/simple/psycopg2/
Downloading https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz#sha256=897a6e838319b4bf648a574afb6cabcb17d0488f8c7195100d48d872419f4457
Best match: psycopg2 2.8.3
Processing psycopg2-2.8.3.tar.gz
Writing /tmp/easy_install-dml23ld7/psycopg2-2.8.3/setup.cfg
Running psycopg2-2.8.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dml23ld7/psycopg2-2.8.3/egg-dist-tmp-9qwen3l_
creating /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
Extracting psycopg2-2.8.3-py3.6-linux-x86_64.egg to /glue/lib/installation
Removing psycopg2 2.8.3 from easy-install.pth file
Adding psycopg2 2.8.3 to easy-install.pth file
Installed /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
Finished processing dependencies for psycopg2==2.8.3

答案 3 :(得分:0)

这些是我用来从python胶壳作业连接到RDS的步骤:

  1. 将您的依赖包打包到一个egg文件中(如果我没有记错的话,这些包必须是纯python)。放在S3中。
  2. 设置您的作业以在作业配置> Python库路径下引用该egg文件
  3. 验证您的工作可以导入软件包/模块
  4. 创建与RDS的胶合连接(位于数据库>表,连接中),测试该连接以确保它可以命中您的RDS
  5. 现在在您的工作中,您必须将其设置为引用/使用此连接。配置作业或编辑作业时,它位于“必需”连接中。

完成这些步骤并进行验证后,您就可以连接了。在我的示例中,我使用了pymysql。

答案 4 :(得分:0)

如果任何人都需要使用python shell与sqlalchemy进行postgres连接,则可以通过引用sqlalchemy, scramp, pg8000 wheel文件,通过消除对setup.py的scramp依赖性从pg8000重构wheel很重要。

答案 5 :(得分:0)

我需要做类似的事情,最终在使用Python进行其他操作的同时在Scala中创建了另一个Glue作业。我知道这可能并不适合所有人,但想提一下How to run DDL SQL statement using AWS Glue