Как получить доступ к облачному SQL из Google Colab - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть экземпляр Google Cloud SQL с общедоступным IP-адресом, доступный только для белого списка IP-адресов и через соединение SSL.

Я хотел бы знать, как я могу подключиться к этой базе данных из Google Colab с Python.

Если я пытаюсь подключиться как любое внешнее приложение, соединение отклоняется, поскольку ip «клиента» не занесен в белый список (и я не могу внести его в белый список, так как у меня его нет, и весьма вероятно, что он нестабилен)

Существует ли ярлык, как в случае с Google App Engine для подключения к базе данных с использованием ее экземпляра и клиента Google?

Спасибо

1 Ответ

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

Немного поздно, чтобы ответить, но я думаю, что у меня есть решение, и оно включает использование Cloud SQL Proxy . В целом, вам сначала нужно использовать Gcloud SDK (входит в состав Colab) для аутентификации, затем установить прокси-сервер, а затем раскрутить его. Я сделал это в двух блоках

# gcloud login and check the DB
!gcloud auth login
!gcloud config set project [YOUR PROJECT ID]
!gcloud sql instances describe [YOUR CLOUDSQL INSTANCE ID]

Эта последняя строка выведет дамп информации, и мы хотим connectionName в частности. Затем следующий блок загружает прокси-сервер и сообщает его прокси-серверу для этого экземпляра CloudSQL:

# download and initialize the psql proxy
!wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
!chmod +x cloud_sql_proxy
# "connectionName" is from the previous block
!nohup ./cloud_sql_proxy -instances="[connectionName]"=tcp:5432 &
!sleep 30s

Позже вы можете (и я нашел это полезным) проверить логи прокси с помощью

!cat nohup.out

И, наконец, вы можете создать соединение с адресом 127.0.0.1:5432 (или любым другим портом, который вы указали выше. Я сделал это с psycopg2, как это

conn = psycopg2.connect(
    host='127.0.0.1', port='5432', database=[YOUR DB NAME],
    user=[USERNAME], password=[PASSWORD])

Кажется, что это работает, хотя это определенно немного медленнее, чем прямое соединение.

...