概要
Cloud FunctionsでCloud SQLを利用する際に手間取ったので手順をメモ
Connecting to Cloud SQL
(公式ドキュメント/英語)
Cloud SQL設定
以下の順でインスタンスを作成
1, Google Cloud Platform > ナビゲーションメニュー > SQL
2, インスタンスの作成 > データベースを選択(MySQL or PostgreSQL) > インスタンスID/rootパスワード/リージョン/データベースのバージョンなどを設定
※DBパスワードは再発行できないそうなので、忘れないようにメモする!!!
3, テーブルを作成する
※Cloud ShellやSQLクライアントツールを使って作成できる。今回は省略
Functionsの設定
MySQL使用例(公式のデモを参照)
functions/index.js
const mysql = require('mysql');
const connectionName =
'<インスタンス接続名>';
const dbUser = '<任意のDBユーザー>';
const dbPassword = '<任意のDBユーザーのパスワード>';
const dbName = '<DB名>';
const mysqlConfig = {
connectionLimit: 1,
user: dbUser,
password: dbPassword,
database: dbName,
};
if (process.env.NODE_ENV === 'production') {
mysqlConfig.socketPath = `/cloudsql/${connectionName}`;
}
let mysqlPool;
exports.mysqlDemo = (req, res) => {
if (!mysqlPool) {
mysqlPool = mysql.createPool(mysqlConfig);
}
mysqlPool.query('SELECT NOW() AS now', (err, results) => {
if (err) {
console.error(err);
res.status(500).send(err);
} else {
res.send(JSON.stringify(results));
}
});
}
とりあえずこれで動く。
ORMを使用する際に設定が足りない場合はmysqlConfig
を以下のように設定
例:
const config = {
host: `/cloudsql/${connectionName}`,
dialect: 'mysql',
username: dbUser,
password: dbPassword,
database: dbName,
dialectOptions: {
socketPath: `/cloudsql/${connectionName}`
},
};