【发布时间】:2020-04-19 13:59:15
【问题描述】:
我在本地运行 Google 的 Cloud SQL Proxy,它使用以下命令与本地提供的 Firebase 功能一起使用:
/cloud_sql_proxy -instances=my-project-12345:us-central1:my-instance=tcp:1433
但是我真的不知道如何在已部署的 Firebase 功能上进行这项工作。
export const typeOrmConnectionOptions: ConnectionOptions = {
name: 'primary',
type: 'mssql',
host: '127.0.0.1',
port: 1433,
username: 'sqlserver',
password: 'my$trongPa$$word',
database: 'TestDB',
synchronize: true,
logging: true,
entities: ['lib/entity/**/*.js'],
...(prod && {
extra: {
socketPath:
'/cloudsql/my-project-12345:us-central1:my-instance=tcp',
credential_file: './admin-service-account-file-long-a1b2c3-hash.json'
}
})
};
我真的是在黑暗中拍摄,将凭证文件作为额外对象的一部分传递给 TypeORM 的连接对象,但是我觉得必须有这样的东西才能链接我在 this step 之后创建的服务帐户到数据库查询。
我的另一个长期想法是使用the environment variable 来设置使用此 JSON 文件的凭据:
process.env.GOOGLE_APPLICATION_CREDENTIALS = fs.readFileSync(
'./admin-service-account-file-long-a1b2c3-hash.json',
'utf8'
)
不开心。
我认为错误消息没有多大帮助,因为我确定我尝试这样做的方式从根本上是不正确的,但是对于它的价值,上面得到了错误
"Failed to connect to 127.0.0.1:1433 - connect ECONNREFUSED 127.0.0.1:1433"
如何使用 Cloud SQL 代理从 Firebase 连接到 GCP 数据库?
编辑
我没有运气连接socketPath 属性,也没有使用 root 用户名和密码直接引用 GCP RD 实例的 IP。我在很多地方看到云代理只在本地开发中需要,在生产中也需要它(这就是我对socketPath 的想法)。
此外,我还尝试使用 MySql 进行测试,如下面的答案中所链接。以前我用它作为 SQL Server 的指南,但由于它仍处于测试阶段,我想我会试试 MySQL。仍然失败,但是当使用它并使用服务 IP 而不是云代理时,我收到超时错误。
我还使用从 GCP 仪表板创建的服务帐户凭据开始 initializing the app。
import { serviceAccount } from './service-account';
const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(
serviceAccount as admin.ServiceAccount
);
admin.initializeApp(adminConfig);
【问题讨论】:
标签: javascript node.js firebase google-cloud-platform google-cloud-sql