【问题标题】:Cannot connect to CloudSQL database from App Engine - Node JS无法从 App Engine 连接到 CloudSQL 数据库 - Node JS
【发布时间】:2020-02-10 13:08:54
【问题描述】:

当我通过 gcloud app deploy 部署时,我没有成功从 App-Engine 上托管的 Node-JS 应用连接到 Cloud SQL

部署后报错Error: connect ENOENT /cloudsql/<INSTANCE_CONNECTION_NAME> at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)

  var config = {
      user: 'my_username',
      database: 'test_db',
      password: 'example_pass'
  };

  if (process.env.DB_INSTANCE_NAME && process.env.NODE_ENV === 'production') {
      // Executing remotely
      config.socketPath = "/cloudsql/<INSTANCE_CONNECTION_NAME>"
  } else {
      // Local development - add IP address to SQL access
      config.host = 'XX.XX.XXX.XX';
  }

  let pool;
  const createPool = async () => {
    pool = await mysql.createPool(config);
    pool.query('SELECT * FROM test_db.test_table', function (error, results, fields) {
      if (error) throw error;
      console.log('The result is: ', results);
    });
  };
  createPool();

我的 app.yaml 看起来像这样:

# [START app_yaml]
runtime: nodejs
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>
env: flex
# [END app_yaml]

App Engine 和 Cloud SQL 数据库都在同一个项目中。我已经多次完成此处列出的步骤:https://cloud.google.com/sql/docs/mysql/connect-app-engine

我可以通过在 SQL 连接选项卡中将我的 IP 地址列入白名单来进行本地连接,没有问题。

【问题讨论】:

  • 您是否正确设置了连接名称?您是否验证服务帐户已正确设置角色:Cloud SQL Client(这是首选)?
  • 此外,ENOENT 错误通常是在您的配置中找不到此类目录条目的问题。您能否检查一下您的 app.js 文件中的 socketpath 配置?尝试改变socketPath如下图:socketPath = /cloudsql/CloudSQLInstanceName:Location:root

标签: node.js google-app-engine google-cloud-sql


【解决方案1】:

删除所有内容并重新开始后,我今天取得了一些成功。我认为问题在于尝试连接到第一代 Cloud SQL 实例。在创建新的测试数据库并使用 Cloud Sql 代理在本地配置访问权限后,我设法使其在本地和 App Engine 构建上工作。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2021-03-07
    • 2017-08-07
    相关资源
    最近更新 更多