Подключение к CloudSQL из Dataflow в Python - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь подключиться к CloudSQL через конвейер python.


Фактическая ситуация

  • Я могу сделать это без проблем, используя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)")

CloudSQL

У меня есть publicIP (для тестирования из локального с помощьюdirectrunner) и я также пытаюсь активировать частный IP-адрес, чтобы выяснить, не может ли это быть проблемой для соединения с DataflowRunner


Option2

Я также пытался с

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)")

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Вы должны имитировать реализацию JdbcIO.read () в Python, как описано в этом StackOverflow ответе

0 голосов
/ 20 декабря 2018

С этим решением я смог получить доступ к CloudSQL.

Для целей тестирования вы можете добавить 0.0.0.0/0 в publicSQL CloudIP без использования сертификатов

0 голосов
/ 18 декабря 2018

Посмотрите на Cloud SQL Proxy .Он создаст локальную точку входа (сокет Unix или порт TCP в зависимости от того, что вы настраиваете), которая будет прокси-сервером и аутентифицировать соединения с вашим экземпляром Cloud SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...