Подключение приложения Node.js в Google Cloud App Engine к экземпляру Google Cloud SQL - PullRequest
0 голосов
/ 14 января 2019

У меня есть приложение Node, которое использует MySQL, подключаясь через конфиг json:

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

Я создал экземпляр SQL Cloud Platform для Google. Я вижу IP-адрес и имя подключения экземпляра.

Я также развернул приложение Node в Google Cloud App Engine в гибкой среде.

Как мне подключить приложение Node к экземпляру SQL? Я вижу это объяснение: https://cloud.google.com/sql/docs/mysql/connect-app-engine, которое говорит мне, чтобы добавить строку настроек в мой app.yaml для соединения либо с сокетом домена Unix, либо с TCP-соединением, но как мне подключиться к ним из моего Node-приложения?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

включают beta_settings до app.yaml, чтобы включить облачный прокси для экземпляра в рабочем состоянии, и указать сокет UNIX socketPath в config, чтобы ваше приложение flex могло подключаться к экземпляру через прокси.

socketPath должно быть в config, только если приложение запущено в работе на App Engine. Для локальной разработки сокет 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

Вот пример приложения Node, которое подключается и запрашивает экземпляр Cloud MySQL с использованием прокси. Оператор if позволяет приложению автоматически переключать конфигурацию dev-local / prod-appengine, с использованием переменных среды .

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.');
});
0 голосов
/ 14 января 2019

Существует два способа подключения Cloud SQL экземпляра с локального рабочего стола:

Пример для postgresql

  1. Использование общедоступного IP-адреса и psql инструмента: https://cloud.google.com/sql/docs/postgres/connect-admin-ip

    а. Добавьте свой внешний IP к Cloud SQL - CONNECTIONS - Authorized networks

    б. Измените ваш connection.host на Cloud SQL экземпляр публичного IP

  2. Использование инструмента cloud_sql_proxy и INSTANCE_CONNECTION_NAME: https://cloud.google.com/sql/docs/postgres/connect-admin-proxy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...