将Google Cloud App Engine上的Node.js应用程序连接到Google Cloud SQL实例

时间:2019-01-14 11:33:46

标签: google-app-engine google-cloud-platform

我有一个使用MySQL的Node应用程序,它通过配置json连接:

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

我已经创建了一个Google Cloud Platform SQL实例。我看到一个IP地址和实例连接名称。

我还在灵活的环境中将Node应用程序部署到Google Cloud App Engine。

如何将Node应用程序连接到SQL实例?我看到以下解释:https://cloud.google.com/sql/docs/mysql/connect-app-engine,它告诉我向我的app.yaml添加一个设置字符串以通过Unix域套接字或TCP连接进行连接,但是如何从Node应用程序连接至这些? / p>

2 个答案:

答案 0 :(得分:1)

包括beta_settingsapp.yaml以在生产中的实例上启用云代理,并在socketPath中指定UNIX套接字config,以便您的flex应用可以连接到通过代理实例。

仅当应用程序在App Engine上的生产环境中运行时,

socketPath才应位于config中。对于本地开发,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

这是一个使用代理连接和查询Cloud MySQL实例的Node应用程序示例。 if语句允许应用程序自动切换配置dev-local / prod-appengine using environment variables

app.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]

package.json

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

server.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.');
});

答案 1 :(得分:0)

有两种方法可以从本地桌面连接Cloud SQL实例:

postgresql的示例

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

    a。将您的外部IP添加到Cloud SQL-CONNECTIONS-Authorized networks

    b。将您的connection.host修改为Cloud SQL实例公共IP

  2. 使用cloud_sql_proxy工具和INSTANCE_CONNECTION_NAMEhttps://cloud.google.com/sql/docs/postgres/connect-admin-proxy