我有一个Google Cloud SQL实例,并计划使用NodeJS从Google Function中访问它。代码如文档中所述
// 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
错误。
问题是:要使用私有IP访问它,我需要在Google Functions代码中进行哪些更改?谢谢
答案 0 :(得分:0)
私有IP仅可由同一Virtual Private Cloud (VPC)上的其他服务访问。由于您的功能在托管网络上运行,因此它当前位于VPC外部,并且无法访问Cloud SQL实例。
Google Cloud Functions确实提供了一个Unix域套接字来与Cloud SQL实例接口。只需使用实例的连接名称更新mysqlConfig.socketPath = cloudsql/${connectionName};
行,它就可以连接。如果您使用的是跨产品或跨区域设置,则更多说明here。