繁体   English   中英

在 Python 中从 Dataflow 连接到 CloudSQL

[英]Connecting to CloudSQL from Dataflow in Python

我正在尝试使用 python 管道连接到 CloudSQL。


实际情况

  • 我可以使用 DirectRunner 毫无问题地做到这一点
  • 我无法使用 DataflowRunner 进行连接

连接功能

def cloudSQL(input):
    import pymysql
    connection = pymysql.connect(host='<server ip>',
                                   user='...',
                                   password='...',
                                   db='...')
    cursor = connection.cursor()
    cursor.execute("select ...")
    connection.close()
    result = cursor.fetchone()
    if not (result is None):
        yield input

错误

这是使用 DataflowRunner 的错误消息

OperationalError: (2003, "Can't connect to MySQL server on '<server ip>' (timed out)")

云SQL

我有 publicIP(使用 directrunner 从本地进行测试),并且我还尝试激活私有 IP 以查看这是否可能是与 DataflowRunner 连接的问题


选项2

我也试过

connection = pymysql.connect((unix_socket='/cloudsql/' + <INSTANCE_CONNECTION_NAME>,
                               user='...',
                               password='...',
                               db='...')

随着错误:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 2] No such file or directory)")

看看Cloud SQL代理 它将创建一个本地入口点(Unix套接字或TCP端口,具体取决于您的配置),以代理和验证与Cloud SQL实例的连接。

您将必须按照此StackOverflow答案中的说明模拟Python中JdbcIO.read()的实现。

通过此解决方案,我可以访问CloudSQL。

出于测试目的,您可以在不使用证书的情况下向CloudSQL publicIP添加0.0.0.0/0

我在 Dataflow 工作容器内使用 Cloud SQL 代理创建了一个示例,使用 Unix 套接字从 Python 管道连接,无需 SSL 或 IP 授权。

因此管道能够连接到多个 Cloud SQL 实例。

https://github.com/jccatrinck/dataflow-cloud-sql-python

有一个屏幕截图显示了以数据库表为例的日志输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM