Unselected Kid Blog

プログラミングを中心に好きなことを好きなように書くブログ

Google Cloud PlatformでPostgreSQLを起動してHerokuから接続する方法

はじめに

今回は自分の運営するamazonの家具を寸法と価格から検索できる「家具サイズ検索」で使っているDBをGoogle Cloud Platform(以後GCP)に変更したので備忘録として記事にしておきます。

先日GCPの無料枠が変更されて様々なサービスの無料枠が強化されました。
qiita.com

公式 https://cloud.google.com/free/
https://cloud.google.com/free/docs/always-free-usage-limits

ここで注目したのが試用期間で使える$300クーポンが一年間使えるようになったこと
これまで無料枠が無かったCompute Engineの無料枠ができました。
1月分のGoogle Compute Engineの無料枠の詳細は以下のような感じです。
・USリージョンのf1-microが1機無料
・30 GBのHDD、5 GBのスナップショット
・North Americaからすべてのリージョンに対してのネットワーク利用1GB

起動方法

今回はGoogle Cloud Platformのこちらのテンプレートを利用します。
f:id:UnselectedKids:20170315204148p:plain

ここでリージョンをUSのどこかにしておけば無料枠の対象になるとおもいます。
f:id:UnselectedKids:20170315205300p:plain

デプロイ完了後上記のようなページが表示される。ここにあるuser名とpasswordを使って接続できます。IPはInstanceの欄をクリックした先に外部IPがあるのでそこに対して接続を設定します。 以下のようにheroku configを設定する。

 heroku config:set DATABASE_URL="postgres://[user]:[passwd]@[IP]:5432/postgres"
 

以上で完了です。 DBを作ったりuser変えたりしたい場合は公式のドキュメントを見れば載っているのでやってみてもいいでしょう。

Bitnami PostgreSQL for Google Cloud Platform

dump

まずdumpファイルをscpで送っておきます.

gcloud compute --project "プロジェクトID" copy-files --zone "ゾーン名" ローカルのファイルパス GCEインスタンス名:コピー先パス

あとはsshで接続して普通にリストアします.聞かれるパスワードは先程のパスワードと同様.

psql -U postgres postgres < dump_file_name

追記[2017/12/11]

なんでか知りませんがデフォルトで設定できていたtpc:5432ポートの開放を自分でやらないとだめになっていました.
VPCネットーワーク設定でposgresのタグでtcp:5432を0.0.0.0/0に対して許可したものを作成します.
詳しい作り方は下を参照しました.

dev.classmethod.jp

んで作成したGCEを編集でネットワークタグにてpostgresを追記して保存すれば繋げられるはずです.
なんでこんな改悪されたんや...