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_URLSPRING_DATASOURCE_USERNAMESPRING_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