使用 Cloud run 连接到 Cloud SQL mySQL

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

我正在云运行上运行一个不和谐的机器人(并不理想,但云构建速度要快得多,管理成本要便宜得多),我希望将其连接到公共 IP 上的云 mySQL 数据库。当尝试创建连接池并使用该连接池时,收到很多 errors 特别是 ETIMEDOUT。

它是通过在我的构建脚本中创建 dockerfile 来部署的,不知道这是否重要。

function createConnectionPoolCloud(){
  const dboptions = {
    connectionLimit : 10,
    socketPath: process.env.INSTANCE_UNIX_SOCKET,
    user     : process.env.DB_USER,
    password : process.env.DB_PASS,
    database : process.env.DB_NAME,
    waitForConnections: true,
    connectTimeout: 5000
  }
  return mysql.createPool(dboptions);
};

这是我正在使用的代码,我正在使用 msql2 库。

我已将云 sql 实例连接到我的云运行部署,并在服务帐户上拥有云 sql 管理员和客户端角色。我已经测试了与本地计算机的 sql 连接,并且可以正常工作。我已经玩过一点超时,但无论持续时间长短,它都会超时。我还确保了 unix 套接字是正确的 /cloudsql/instanceconnectionname。

我也遵循了这些说明,并且我设置了云 sql、运行和 sql 管理 API。

不知道到底是什么原因造成的,当我使用该函数创建池并执行

pool.promise()
然后执行
promisePool.query().
时,我就会收到错误 看了其他一些帖子,似乎没有一个解决方案有效出去。在我的本地计算机上,我记录整个池对象只是为了确保我可以看到某些内容,但这些内容根本不会出现在云日志中,这可能只是记录整个对象的本质,但值得一提。

node.js google-cloud-platform discord.js google-cloud-sql google-cloud-run
1个回答
0
投票

我遵循了相同的说明,它对我有用。

const mysql = require('mysql2/promise');

const dboptions = {
  socketPath: '/cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE_NAME>',
  user: 'root',
  password: 'my-password',
  database: 'my-database',
  waitForConnections: true,
  connectTimeout: 5000
}
const pool = await mysql.createPool(dboptions);
const [result] = await pool.query( `SELECT NOW();`);
console.table(result); // prints returned time value from server

您应该考虑使用 Node.js 连接器,因为它将为您处理证书和 mTLS 连接的管理。而且它不需要附加“Cloud SQL Connection”。

以下是如何启动新的

mysql2
连接池。

import mysql from 'mysql2/promise';
import {Connector} from '@google-cloud/cloud-sql-connector';

const connector = new Connector();
const clientOpts = await connector.getOptions({
  instanceConnectionName: 'my-project:region:my-instance',
  ipType: 'PUBLIC',
});
const pool = await mysql.createPool({
  ...clientOpts,
  user: 'my-user',
  password: 'my-password',
  database: 'db-name',
});
const conn = await pool.getConnection();
const [result] = await conn.query( `SELECT NOW();`);
console.table(result); // prints returned time value from server

await pool.end();
connector.close();

更多信息请访问 https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector#using-with-mysql

© www.soinside.com 2019 - 2024. All rights reserved.