AWS Python Shell - 如何使用 Glue 目录连接

AWS Python Shell - How to use Glue Catalog Connections

我在 Glue 中定义了一个 JDBC 连接,我能够在 Glue Spark 作业中成功使用它。我如何在 Glue Python Shell 作业中使用相同的连接?我找不到任何模板如何执行此操作,但我已经看到了可能的参考资料。

另一种方法是如何在我需要包含外部库的 Python Shell 中定义 JDBC 连接? pyodbc 由于依赖关系,我读过的内容不可用。

当您将 JDBC 连接附加到 Glue Python Shell 作业时,Glue 只能使用它在具有安全组的指定子网中启动 ENI。 jdbc url、用户名、密码对 Python Shell 作业没有任何价值。

因此,您必须提供一个外部包,如 pymssql (http://www.pymssql.org/en/stable/),并从脚本本身初始化连接。

您可以参考提供自己的 Python 库的文档:https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-egg-library

这是代码。确保在您的 python shell 作业 cloudformation 模板中添加了相同的连接。我们正在使用 pg8000 库。

def get_connection(self, conn_name):

        client = boto3.client('glue', region_name=self.region_id)
        response = client.get_connection(Name=conn_name)
        print response

        connection_properties = response['Connection']['ConnectionProperties']
        URL = connection_properties['JDBC_CONNECTION_URL']
        url_list = URL.split("/")

        host = "{}".format(url_list[-2][:-5])
        port = url_list[-2][-4:]
        database = "{}".format(url_list[-1])
        user = "{}".format(connection_properties['USERNAME'])
        pwd = "{}".format(connection_properties['PASSWORD'])

        # print "user:{}".format(user)
        # print "pwd:{}".format(pwd)
        # print "host:{}".format(host)
        # print "port:{}".format(port)
        # print "database:{}".format(database)

        rs_conn = dbapi.connect(database=database, host=host, port=5439, \
                                user=user, password=pwd, ssl=True)
        cur = rs_conn.cursor()
        cur.execute("set statement_timeout = 1200000")
        rs_conn.commit()
        cur.close()
        return rs_conn