🦔

[Heroku] 2つ以上のAPPから1つの同じPostgreSQLを使う

2021/09/22に公開

Setting

環境変数でDATABASE_URLを各アプリにコピペするのはめんどくさいしミスる可能性もあるしたまにあるアップデートでDBのURLが変更された場合に反映されないため、アドオンの共有で設定します。

まず、1つのアプリにPostgreSQLのアドオンを追加しておきます。ブラウザからでもコマンドでも構いません。
1つ目のアプリをtest-app-1として追加されているアドオンを確認します。

$ heroku addons -a test-app-1

Add-on                                         Plan       Price  State
─────────────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-xxxx-yyyy)  hobby-dev  free   created
 └─ as DATABASE

上記で表示されたアドオンのIDを確認しておきます。この場合はpostgresql-xxxx-yyyyとなっている部分です。

2つ目のアプリをtest-app-2として、確認したアドオンIDをもとにアドオンを追加します。

$ heroku addons:attach -a test-app-2 postgresql-xxxx-yyyy
Attaching postgresql-xxxx-yyyy to ⬢ test-app-2... done
Setting DATABASE config vars and restarting ⬢ test-app-2... done, v13

完了したら、アドオンが2つ目のアプリに追加されたことを確認します。

$ heroku addons -a test-app-2

Add-on                                         Plan       Price                             State
─────────────────────────────────────────────  ─────────  ────────────────────────────────  ───────

heroku-postgresql (postgresql-xxxx-yyyy)  hobby-dev  (billed to test-app-1 app)  created
 ├─ as DATABASE
 └─ as DATABASE on test-app-1 app

上記でアドオンがtest-app-1にも利用されていることがわかります。

最後に2つのアプリの環境変数に同じものがセットされているか確認します。

$ heroku config -a test-app-1
=== test-app-1 Config Vars
DATABASE_URL:          postgres://xxxx:yyyy@ec2-xxxxx.compute-1.amazonaws.com:5432/zzzz
$ heroku config -a test-app-2
=== test-app-2 Config Vars
DATABASE_URL:          postgres://xxxx:yyyy@ec2-xxxxx.compute-1.amazonaws.com:5432/zzzz

2つのDATABASE_URLが一致していれば完了です。

Discussion