如何使用环境变量将自定义 GoogleAuth 凭据传递到 cloud-sql-connector

问题描述 投票:0回答:1

我想使用 @google-cloud/cloud-sql-connector 和服务帐户凭据将我的 vercel 托管后端连接到我的 Google Cloud SQL 实例。

目前,当我将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为服务帐户凭据所在的路径时,我可以在本地开发中建立连接。

但是,我想取代 GOOGLE_APPLICATION_CREDENTIALS 并传入服务帐户的自定义凭据。 Vercel 不支持文件路径,因此我需要从环境变量添加凭据。

我可以从服务帐户 JSON 创建一个身份验证客户端(根据本文档),但是我正在尝试解决:

  1. 如何将此客户端与 cloud-sql-connector 一起使用
    • 连接器似乎不喜欢我包含“auth:client”的方式
  2. 如何让连接器使用这些凭据而不是查找默认凭据。
    • 连接器仍在寻找默认凭据。

这是我当前的代码:

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

google-cloud-sql
1个回答
0
投票

根据此 github 问题中的讨论,

Cloud SQL

Node.js
连接器使用标准
google-auth-library
,它支持具有服务帐户模拟的
Application Default Credentials
JSON。

对于我之前的回答中的误解,我深表歉意。正如您所提到的,他们在最近的更新中实现了将自定义凭据传递到

node.js
连接器的功能。

您可以看看@John Hanley 分享的这个示例。如果您仍然无法成功继续,您可以在

github.

提出新问题
© www.soinside.com 2019 - 2024. All rights reserved.