GCP Cloud Функции подключения к облаку SQL с частным IP
Я следую этому примеру, чтобы установить соединение между облачной функцией и Postgres Cloud SQL: https://cloud.google.com/functions/docs/sql.
Когда я создаю тестовый экземпляр Cloud SQL с Public IP и запускаю функцию облака, он подключается к экземпляру Cloud SQL и что-то возвращает. По соображениям безопасности я не могу оставить Public IP включенным, поэтому, когда я выбираю Private IP в облачном экземпляре SQL, я получаю:
Error: function crashed. Details:
could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/cloud-sql-test-250613:us-central1:myinstance-2/.s.PGSQL.5432"?
Я не могу получить из документации, что такое контракт между облачной функцией и облачным SQL-экземпляром. Если мы используем доменные сокеты Unix, следует ли мне вообще беспокоиться об IP-адресах? Имеет ли значение, является ли это публичным или частным? Если это имеет значение, должен ли я пройти через весь процесс настройки инфраструктуры частного IP? Нужен ли бессерверный VPC?
1 ответ
Благодаря этому мне удалось установить связь между облачной функцией и частным экземпляром Cloud SQL.
Кажется, что имеет значение, если вы отключаете общедоступные IP-адреса, всякий раз, когда я отключал общедоступные IP-адреса, я продолжал получать ERR CONN REFUSED, что, как кажется, является вашим случаем, чтобы ваш экземпляр Cloud SQL был только с частным IP-адресом, я думаю, что вам действительно нужно использовать Serverless VPC.
Вот что я бы порекомендовал вам попробовать:
Убедитесь, что вся ваша инфраструктура находится в одном регионе (Cloud SQL, Cloud Function,VPC Connector)
Сделайте эти шаги, пожалуйста:
Установите для экземпляра Cloud SQL только частное подключение. (Облачный экземпляр SQL> Соединения)
Убедитесь, что ваш частный экземпляр CloudSQL находится в нужной "Связанной сети" (VPC).
Создайте соединитель VPC в сети VPC, в которой находится ваш экземпляр Cloud SQL. (тот, который связан с экземпляром MySql)
Чтобы создать соединитель, перейдите: VPC Network > VPC Serverless Access > Создать соединитель
В VPC Network > [Your VPC] > VPC Network Peering вы можете проверить правильность соединения с вашим экземпляром Cloud SQL.
Создайте облачную функцию, используя код на желаемом языке. (Вы можете проверить с примерами в документации.)
При создании облачной функции убедитесь, что она установлена в том же регионе, а также добавьте созданный вами коннектор VPC в параметр "Выходные параметры" в облачной функции.
Если вы попытаетесь создать VPC Connector через консоль GCP, вы сможете выбрать только 1 зону. Но если вы используете облачную оболочку, вы можете определить другие области. Вы можете попробовать это с помощью этой команды и в этих областях.
Коннекторы vpc-доступа для сетей бета-вычислений gcloud создают [CONNECTOR_NAME] \ --network [VPC_NETWORK] \ --region [REGION] \ --range [IP_RANGE]
Области:
США-Центральный1, США-Восток1, Европа-Запад1
Пожалуйста, дайте мне знать, если это сработало для вас.
ОБНОВИТЬ:
Привет еще раз, alobodzk,
Попробуйте создать свою облачную функцию в Python (однажды убедившись, что все предыдущие шаги в порядке).
Попробуйте этот код:
Облачная функция index.js (замените все данные соединителя своими учетными данными)
import mysql.connector
from mysql.connector import Error
def mysql_demo(request):
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(host='CloudSQL Instance Private IP', database='Database Name, user='UserName', password='Password')
if connection.is_connected():
db_Info = connection.get_server_info()
print("Connected to MySQL database... MySQL Server version on ",db_Info)
cursor = connection.cursor()
cursor.execute("select database();")
record = cursor.fetchone()
print ("Your connected to - ", record)
except Error as e :
print ("Error while connecting to MySQL", e)
finally:
#closing database connection.
if(connection.is_connected()):
cursor.close()
connection.close()
print("MySQL connection is closed")
# [END functions_sql_mysql]
Функция облачных вычислений
psycopg2==2.7.7
PyMySQL==0.9.3
mysql-connector-python