Pivotal Web Service -> Heroku 移行作業メモ

Dev/Blog
Pivotal Web Service
Heroku

更新日時 : 2020/11/23 12:07
投稿日時 : 2020/11/23 11:54

Migration to Heroku

APIを稼働しているPWSがEOLになるため、
一旦APIをHerokuにデプロイした。


Deploy Heroku

基本的にビルド設定はそのままでいけるが、
Java11を使用するためにはsystem.propertiesにruntime設定を記述する必要があった。

java.runtime.version=11

あとは環境変数の移行も忘れずに。
後述するが、微妙に詰まった。

Migrate PostgreSQL

ElephantSQLからHerokuにデータを移行する。とりあえずdumpファイルをコンソールからダウンロードして、それをそのままインポートする流れで進める。

  1. ElephantSQLからバックアップファイルを作成後、ダウンロードする
  2. バックアップファイル(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