Pivotal Web Service -> Heroku 移行作業メモ
Migration to Heroku
APIを稼働しているPWSがEOLになるため、
一旦APIをHerokuにデプロイした。
Deploy Heroku
基本的にビルド設定はそのままでいけるが、
Java11を使用するためにはsystem.properties
にruntime設定を記述する必要があった。
java.runtime.version=11
あとは環境変数の移行も忘れずに。
後述するが、微妙に詰まった。
Migrate PostgreSQL
ElephantSQLからHerokuにデータを移行する。とりあえずdumpファイルをコンソールからダウンロードして、それをそのままインポートする流れで進める。
- ElephantSQLからバックアップファイルを作成後、ダウンロードする
- バックアップファイル(dump想定)をHeroku PostgreSQLにインポートする
1. Backup from ElephantSQL
PWSから、ElephantSQLにログイン後、Backup作成機能があるので、メニューのBACKUPから手動バックアップを実施後、ダウンロードする。
https://www.elephantsql.com/docs/backups.html
バックアップファイルはlzo形式で圧縮されているため、lzop
コマンドを実行できるようにしておくこと。Macならbrew install lzop
でインストール後、lzop -d ./${backup_file_name}.sql.lzo
で解凍できた。
2. Import dump
1.の手順で解凍したSQLファイルをそのままインポートしようとしたが、どうやらElephantSQLでproductテーブルを自動作成していたり、Flywayのレコードが競合しそうだったりと難しそうだった。
そこで、多少面倒でも手動でレコード挿入の箇所を抽出して、SQLファイルを直接DBに読み込ませることにした。
Herokuはheroku pg:psql
コマンドでリモートサーバにアクセスして、SQLを直接実行できる+アプリの設定ページで必要な認証情報を閲覧可能だったので、SQLファイルのインポートは容易だった。
参考
https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql
詰まったところ
DBサーバの変更があったので、関連する環境変数も変更する必要があった。
SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USERNAME
SPRING_DATASOURCE_PASSWORD
上記をアプリ設定ページを参考に変更して、デプロイしたが、アプリが動いていない。heroku logs --tail
でログを確認したところ、Message : FATAL: password authentication failed for user "u10052"
とパスワードが違うとエラーが出ている。u10052
てユーザーあったっけと調べていたところ、HerokuでSpring Bootを用いる場合、URLやユーザー、パスワードは自動生成しているっぽい。なので、環境変数は自動で追加されたDATABASE_URL
だけで良い。
https://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku#connecting-to-a-database
application.properties
でDB設定をカスタマイズできるよと書いてあったので、そのまま転記した。Driver設定は必須かな。
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.maxActive=10
spring.datasource.maxIdle=5
spring.datasource.minIdle=2
spring.datasource.initialSize=5
spring.datasource.removeAbandoned=true