代码之家  ›  专栏  ›  技术社区  ›  Boris K

将Google Cloud app Engine上的Node.js app连接到Google Cloud SQL实例

  •  0
  • Boris K  · 技术社区  · 7 年前

    {
        "client": "mysql",
        "connection": {
            "host": "something",
            "user": "something",
            "password": "something",
            "database": "daimonion-db",
            "debug": false
        }
    }
    

    我已经创建了一个Google云平台SQL实例。我看到一个IP地址和实例连接名。

    我还在灵活的环境中向谷歌云应用引擎部署了节点应用程序。

    https://cloud.google.com/sql/docs/mysql/connect-app-engine 它告诉我在app.yaml中添加一个设置字符串以连接Unix域套接字或TCP连接,但如何从节点应用连接到这些设置字符串?

    2 回复  |  直到 7 年前
        1
  •  3
  •   alp    7 年前

    包括 beta_settings app.yaml socketPath 在里面 config ,以便您的flex应用程序可以通过代理连接到实例。

    短道 应该在里面 配置 仅当应用程序正在应用程序引擎上的生产环境中运行时。对于本地开发,TCP套接字用于代理客户端,您需要安装该客户端并从以下命令开始:

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
    chmod +x cloud_sql_proxy
    
    ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306
    

    if 语句允许应用程序自动切换配置dev local/prod appengine, using environment variables .

    应用程序yaml

    runtime: nodejs
    env: flex
    env_variables:
      SQL_USER: [SQL_USER]
      SQL_PASSWORD: [SQL_PASSWORD]
      SQL_DATABASE: [DATABASE_NAME]
      INSTANCE_CONNECTION_NAME: [INSTANCE_CONNECTION_NAME]
    beta_settings:
      cloud_sql_instances: [INSTANCE_CONNECTION_NAME]
    

    {
      "engines": {
        "node": "8.x.x"
      },
      "dependencies": {
        "express": "4.16.3",
        "mysql": "^2.15.0"
      },
      "scripts": {
        "start": "node server.js"
      }
    }
    

    服务器.js

    const express = require('express');
    const mysql = require('mysql');
    
    const app = express();
    
    var config = {
        user: process.env.SQL_USER,
        database: process.env.SQL_DATABASE,
        password: process.env.SQL_PASSWORD
    }
    
    if (process.env.INSTANCE_CONNECTION_NAME && process.env.NODE_ENV === 'production') {
        config.socketPath = `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`;
      }
    
    var connection = mysql.createConnection(config);
    
    connection.connect();
    
    app.get('/', (req, res) => {
        connection.query(
            'SELECT * FROM entries', function(err, result, fields){
                if (err) throw err;
                res.send(result);
            }
        );
    });
    
    const PORT = process.env.PORT || 8080;
    app.listen(PORT, () => {
      console.log(`App listening on port ${PORT}`);
      console.log('Press Ctrl+C to quit.');
    });
    
        2
  •  0
  •   Lin Du Correcter    7 年前

    有两种连接方式 Cloud SQL

    例如 postgresql

    1. 使用公共IP和 psql https://cloud.google.com/sql/docs/postgres/connect-admin-ip

      a、 将外部IP添加到 云SQL CONNECTIONS - Authorized networks

      connection.host 云SQL 实例公用IP

    2. cloud_sql_proxy 工具和 INSTANCE_CONNECTION_NAME https://cloud.google.com/sql/docs/postgres/connect-admin-proxy