Проблемы с подключением приложения Node.js к Cloud SQL базе данных - PullRequest
0 голосов
/ 02 августа 2020

Мне нужно развернуть приложение node.js, которое может взаимодействовать с базой данных. Я уже настроил базу данных Cloud SQL, для которой я внес свой компьютер в белый список publi c IP. Когда я запускаю свое приложение локально, все в порядке, и я могу получить доступ к своим данным. Однако когда дело доходит до развертывания с помощью Google App Engine, я не могу понять, как подключиться к моей базе данных. Что я сделал до сих пор:

  • Создание файла app.yaml, который содержит runtime: nodejs12.
  • Изменение хоста базы данных в файле конфигурации. Не уверен, что мне нужно написать IP-адрес publi c Cloud SQL (как я делаю при локальной разработке), localhost (поскольку GAE и Cloud SQL размещены на одном сервере) или полный INSTANCE_CONNECTION_NAME.
  • В соответствии с ролью Cloud SQL Client для соответствующей службы в панели администратора IAM

Я прочитал в документации, что мне, возможно, придется использовать прокси. Я действительно не знаю, что с этим делать, поэтому ничего не сделал. Вам кажется, что этот способ стоит изучить?

Заранее благодарю

1 Ответ

0 голосов
/ 02 августа 2020

Страницы документации находятся здесь:

https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard

Для Publi c IP-соединение:

Подключение с помощью Unix сокетов

После правильной настройки вы можете подключить свою службу к сокету домена unix экземпляра Cloud SQL экземпляра, используя формат:

/cloudsql/INSTANCE_CONNECTION_NAME

Эти подключения устанавливаются автоматически зашифровано без дополнительной настройки. Примеры кода, показанные ниже, являются отрывками из более полных примеров на сайте GitHub. Нажмите «Просмотр» на GitHub, чтобы увидеть больше.

Предупреждение: операционные системы на базе Linux имеют максимальную длину пути к сокету 107 символов. Если общая длина пути превышает эту длину, вы не сможете подключиться к сокету из App Engine.

cloud-sql / mysql / mysql / server.jsView на GitHub

  const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"

  // Establish a connection to the database
  return await mysql.createPool({
    user: process.env.DB_USER, // e.g. 'my-db-user'
    password: process.env.DB_PASS, // e.g. 'my-db-password'
    database: process.env.DB_NAME, // e.g. 'my-database'
    // If connecting via unix domain socket, specify the path
    socketPath: `${dbSocketPath}/${process.env.INSTANCE_CONNECTION_NAME}`,
    // Specify additional properties here.
    ...config
  });
}

Если вы подключаетесь с помощью частного IP, игнорируйте все это, и вы можете просто использовать частный IP с портом 3306 (для MySQL) или 5432 (для Postgres).

...