Подключение к облачному SQL из функций Google с использованием частного IP - PullRequest
0 голосов
/ 23 января 2019

У меня есть экземпляр Google Cloud SQL, и я планирую получить к нему доступ из функции Google с помощью NodeJS. Код указан в документации

// mysql
const mysql = require('mysql');
const connectionName = process.env.INSTANCE_CONNECTION_NAME || 'project:region:sql-instance';
const dbUser = process.env.SQL_USER || 'root';
const dbPassword = process.env.SQL_PASSWORD || 'password';
const dbName = process.env.SQL_NAME || 'database';

const mysqlConfig = {
  connectionLimit: 1,
  user: dbUser,
  password: dbPassword,
  database: dbName,
};
//if (process.env.NODE_ENV === 'production') {
  mysqlConfig.socketPath = `/cloudsql/${connectionName}`;
//}

// Connection pools reuse connections between invocations,
// and handle dropped or expired connections automatically.
let mysqlPool;

function searchDB() {
  if (!mysqlPool) {
    mysqlPool = mysql.createPool(mysqlConfig);
    console.log(mysqlPool);
  }
  return new Promise( function( resolve, reject ) {
    mysqlPool.query('SELECT * FROM table', (err, results) => {
      if (err) {
        console.error('error in retrieving data:', err);
        resolve(''); // sending blank response
      } else {
        console.log('success in getting data', JSON.stringify(results));
        resolve(JSON.stringify(results));
      }
    });
  });
}

Я могу получить доступ к базе данных, когда я установил ее с публичным IP. Однако, когда я установил частный IP, я получаю ошибку ECON refused.

Вопрос: какие изменения мне нужно внести в код функций Google, чтобы получить к нему доступ с помощью частного IP? Спасибо

1 Ответ

0 голосов
/ 23 января 2019

Частные IP-адреса доступны только другим службам в том же Виртуальном частном облаке (VPC) .Поскольку ваша функция работает в управляемой сети, она в настоящее время находится за пределами вашего VPC и не имеет доступа к вашему экземпляру Cloud SQL.

Облачные функции Google предоставляют сокет домена unix для взаимодействия с экземплярами Cloud SQL.Просто обновите строку mysqlConfig.socketPath = cloudsql/${connectionName}; именем соединения вашего экземпляра, и он сможет подключиться.Если вы используете кросс-продукт или кросс-региональную настройку, здесь есть дополнительные инструкции здесь .

...