#やること
【Node.js×PostgreSQL】ExpressとPostgreSQLでローカル環境のAPIサーバーを構築する
https://qiita.com/Yoshimizu-Yuuki/private/77d16390b3ea1bac63e1
前回の記事で作った開発環境を、
今回はGKEとCloudSQLに載せて、APIを作成する。
#手順確認
1.CloudSQLを登録する
2.GKEにクラスタを作成しコンテナをデプロイする
3.接続出来るかどうかを確認する
#1.CloudSQLを登録する
GCPからCloudSQLのPostgresのインスタンスを生成します。
この時、プライベートIP接続にもチェックをいれておきます。(後から接続の箇所から変更することもできます。)
インスタンスをPostgreSQLで作成します。
作成後は、インスタンスに接続して前回作ったSQL文を流し込みます。
接続する際には、接続元のグローバルIPアドレスを許可するように設定しておきましょう。
#2.GKEにクラスタを作成しコンテナをデプロイする
まず、API用のDockerFileを作成します。
apiフォルダに関しては、前述のやりたいことに貼ってある前回の記事を参照してください。
FROM node:12-alpine
WORKDIR /api
COPY ./ /api
RUN npm install
CMD npm run start
このDockerfileの入っているAPIフォルダをgitのリポジトリに上げます!
そして、GCPのShellでgit cloneをして拾ってきます。
あとは以下の公式に書いてある通りにコマンドを進めていくと、コンテナをデプロイすることができます。途中のクラスタ作成は、公式に書いてあるコマンドではうまくいかなかったので、GCPのコンソールからクラスタを作成しました。
ポート番号は適宜必要に応じて設定しましょう。
#3接続できるかどうかを確認する
接続するために、まず、index.jsのconnectionStringの接続詞のアドレスをプライベートIPアドレスに書き換えます。
const express = require('express')
const app = express()
const { Pool, Client } = require('pg')
//ここのXX.XX.XX.XXにプライベートIPアドレスを設定します
const connectionString = 'postgres://postgres:postgres@XX.XX.XX.XX:5432/postgres'
const pool = new Pool({
connectionString: connectionString,
})
pool.query('SELECT NOW()', (err, res) => {
console.log(err, res)
pool.end()
})
/*
URL設計
/company⇒Companyの全件取得
/company/:id⇒Companyテーブルのidに応じたレコードの取得
*/
app.get('/company',(req, res) =>
{
const client = new Client({
connectionString: connectionString,
})
client.connect()
client.query('SELECT * FROM Company', (err, result) => {
res.send(result.rows);
client.end()
})
});
app.get('/company/:id',(req, res) =>
{
const client = new Client({
connectionString: connectionString,
})
client.connect()
//idを使ってクエリ
client.query({
name: 'fetch-user',
text: 'SELECT * FROM Company WHERE id = $1',
values: [req.param('id')]
}, (err, result) => {
res.send(result.rows);
client.end()
})
});
app.listen(3000, () => console.log('Example app listening on port 3000!'))
GKEクラスタのグローバルIPアドレス(XX.XX.XX.XX)にアクセスして、XX.XX.XX.XX:3000/Companyでアクセスしてみましょう。
そこで、Companyテーブルのレコードが取得できていれば、GKEとCloudSQLの接続完了です!!