【问题标题】:Trouble connecting Node.js app to Cloud SQL Database将 Node.js 应用程序连接到 Cloud SQL 数据库时出现问题
【发布时间】:2020-08-02 00:23:24
【问题描述】:

我需要部署一个可以与数据库交互的 node.js 应用程序。我已经配置了 Cloud SQL 数据库,为此我已将我的计算机公共 IP 列入白名单。当我在本地运行我的应用程序时,一切都很好,我可以访问我的数据。但是,在使用 Google App Engine 进行部署时,我不知道如何连接到我的数据库。到目前为止我做了什么:

  • 创建一个包含runtime: nodejs12app.yaml 文件。
  • 在配置文件中更改数据库主机。不确定我是否必须编写 Cloud SQL 的公共 IP(就像我在本地开发中所做的那样)、localhost(因为 GAE 和 Cloud SQL 都托管在同一台服务器上)或完整的 INSTANCE_CONNECTION_NAME
  • 根据 IAM 管理面板上的 Cloud SQL Client 角色到相应的服务

我阅读了可能必须使用代理的文档。我真的不知道该怎么办,所以我什么也没做。你觉得这是一种值得探索的方式吗?

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    文档页面在这里:

    https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard

    对于公共 IP 连接:

    使用 Unix 套接字连接

    正确配置后,您可以使用以下格式将服务连接到 Cloud SQL 实例的 unix 域套接字:

    /cloudsql/INSTANCE_CONNECTION_NAME

    这些连接会自动加密,无需任何额外配置。下面显示的代码示例摘自 GitHub 站点上更完整的示例。单击在 GitHub 上查看以查看更多信息。

    警告:基于 Linux 的操作系统的最大套接字路径长度为 107 个字符。如果路径的总长度超过此长度,您将无法从 App Engine 连接到套接字。

    cloud-sql/mysql/mysql/server.js在GitHub上查看

      const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"
    
      // Establish a connection to the database
      return await mysql.createPool({
        user: process.env.DB_USER, // e.g. 'my-db-user'
        password: process.env.DB_PASS, // e.g. 'my-db-password'
        database: process.env.DB_NAME, // e.g. 'my-database'
        // If connecting via unix domain socket, specify the path
        socketPath: `${dbSocketPath}/${process.env.INSTANCE_CONNECTION_NAME}`,
        // Specify additional properties here.
        ...config
      });
    }
    

    如果您使用私有 IP 连接,请忽略所有这些,您可以只使用端口 3306(对于 MySQL)或 5432(对于 Postgres)的私有 IP。

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2020-11-08
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2019-09-29
      相关资源
      最近更新 更多