#python #mysql #ssh #google-cloud-functions #mysql-python
#python #mysql #ssh #google-cloud-функции #mysql-python
Вопрос:
Я пытаюсь подключиться к серверу MySQL через ssh-туннель в одной из моих облачных функций Google. Это отлично работает в моей домашней среде. Я предполагаю, что это какая-то проблема с портом в облачной функции.
Редактировать: для пояснения сервер MySQL находится на веб-сервере с общим хостингом Namecheap. Не Google Cloud SQL
Каждый раз, когда я запускаю это, у меня тайм-аут с «неизвестной ошибкой». Туннель, похоже, прошел успешно. Однако я не могу заставить соединение mysql работать.
import base64
import sshtunnel
import mysql.connector
def testing(event, context):
"""
Testing function
"""
with sshtunnel.SSHTunnelForwarder(
("server address", port),
ssh_username="user",
ssh_password="password",
remote_bind_address=("127.0.0.1",3306),
) as server:
print(server.local_bind_port)
with mysql.connector.connect(
user="user",
password="password",
host="localhost",
database="database",
port=server.local_bind_port
) as connection:
print(connection)
Ответ №1:
Слишком много шагов для перечисления, но мне интересно, влияет ли настройка «connector» на разницу даже для SSH. Возможно, вам нужно создать соединитель, как показано здесь (обратите внимание, что инструкции на вкладке «Частный IP» отличаются от инструкций на вашем локальном компьютере). Затем настройте облачные функции для использования этого соединителя. Убедитесь, что вы также используете правильный порт.
Соединитель бессерверного доступа к VPC обеспечивает связь с вашей сетью VPC. Чтобы подключиться напрямую с частного IP-адреса, вам необходимо:
Убедитесь, что созданный выше экземпляр Cloud SQL имеет частный IP-адрес. Если вам нужно добавить его, инструкции см. На странице Настройка частного IP.
Создайте бессерверный соединитель доступа к VPC в той же сети VPC, что и ваш экземпляр Cloud SQL. Если вы не используете общий VPC, соединитель должен находиться в том же проекте и регионе, что и ресурс, который его использует, но соединитель может отправлять трафик на ресурсы в разных регионах. Бессерверный доступ к VPC поддерживает связь с сетями VPC, подключенными через Cloud VPN и VPC Network Peering. Бессерверный доступ к VPC не поддерживает устаревшие сети.
Настройте облачные функции для использования соединителя.
Подключитесь, используя частный IP-адрес вашего экземпляра и порт 3306.
Имейте в виду, что эта «неизвестная» ошибка также вполне может быть связана с тем, что API администратора Cloud SQL здесь не включен. На самом деле, убедитесь, что вы следуете всей этой странице, поскольку это широкий вопрос.
Дайте нам знать, что сработало для такого типа ошибок.
Комментарии:
1. Сервер MySQL, к которому я пытаюсь получить доступ, размещен на веб-сервере с общим доступом Namecheap, а не на облачном SQL
2. Если направление CF на SQL и туннель кажется успешным, я бы подумал, что он проходит мимо Google. Но поскольку CF не имеет сервера (http / IP не указан), и если Namecheap требует внесения в белый список, вам нужно будет связать его со статическим IP-адресом, например . В противном случае, если IP-адрес не требуется и является ли входящий / исходящий, найдите настройки («весь трафик») в этой статье, чтобы убедиться, что все открыто. Ни одна из этих конфигураций не была указана в вашем сообщении, и по умолчанию CF является частным, без IP.