我想使用 @google-cloud/cloud-sql-connector 和服务帐户凭据将我的 vercel 托管后端连接到我的 Google Cloud SQL 实例。
目前,当我将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为服务帐户凭据所在的路径时,我可以在本地开发中建立连接。
但是,我想取代 GOOGLE_APPLICATION_CREDENTIALS 并传入服务帐户的自定义凭据。 Vercel 不支持文件路径,因此我需要从环境变量添加凭据。
我可以从服务帐户 JSON 创建一个身份验证客户端(根据本文档),但是我正在尝试解决:
这是我当前的代码:
import mysql from 'mysql2/promise';
import {Connector} from '@google-cloud/cloud-sql-connector';
import { auth } from 'google-auth-library';
let pool;
// load the environment variable with our keys
const keysEnvVar = process.env.CREDENTIALS_JSON
if (!keysEnvVar) {
throw new Error('The CREDENTIALS_JSON environment variable was not found!');
}
const keys = JSON.parse(keysEnvVar);
const client = auth.fromJSON(keys);
client.scopes = ['https://www.googleapis.com/auth/cloud-platform'];
const connector = new Connector({
auth: client
});
const clientOpts = await connector.getOptions({
instanceConnectionName: process.env.CONNECTION_NAME,
ipType: 'PUBLIC',
});
if (!pool){
pool = await mysql.createPool({
...clientOpts,
user: process.env.DBUSER,
password: process.env.DBPASSWORD,
});
}
const conn = await pool.getConnection();
const [result] = await conn.query( `SELECT NOW();`);
console.table(result); // prints returned time value from server
conn.release();
export default pool
我正在使用cloud-sql-connector版本1.2.0,google-auth-library版本9.2.0和mysql2版本3.6.2