背景
Heroku の Add-on として提供されていた mLab MongoDB が 2020/11/10 終了する事になりました。先日、 mLab がMongoDB, Inc. に買収されたのでそれに伴う動きなります。errbitなどを Heroku でホストしている場合、対応が必要になります。今回の移行プロセスは既存のデータも移行できるプロセスになっています。
ObjectRocket for MongoDB
Heroku からのメールで移行先としておすすめされているのが ObjectRocket ですが、月額46ドル〜となっています。errbit を使っているのはコスト抑えたいからというのが多いと思うので、これは少し厳しい。
https://elements.heroku.com/addons/ormongo
移行先としての MongoDB Atlas
こちらの PR でまとめられたドキュメントがあります。ただし、新規に Heroku ホストすることを前提としていますので、この部分は別の対応が必要です。
https://github.com/errbit/errbit/blob/master/docs/deployment/heroku.md
そこで、データの移行については下記のドキュメントにまとめられています。
https://docs.mlab.com/shutdown-of-heroku-add-on/
MongoDB Atlas であれば無料の範囲で運用できそうです。
移行方法
基本はドキュメントのとおりです。
アプリケーションを最新バージョンにする
mongodb 4.2系のサポートが必要になるので最新版にしておいてください。
MongoDB Atlasのクラスターを作成する
- アカウントを作成しShared Clusterを選択する
- M0を選び無料枠でのクラスターを作成する
- Database Accessからユーザーを作成する。
パスワード認証で、Read and write to any databaseの権限を付与する。
- IPアドレスのフィルターを解除する。
Networwk AccessからAllow Access From Everywhereを選択する。
- Connectから接続情報を取得する。
Rubyの2.5以降を選択する。
Heroku側で接続情報を更新する
- 環境変数 MONGODB_URI に上記でコピペした接続情報をコピペする。
とのところは適宜書き換える。注意:環境変数を追加するとダウンタイムが発生します
mongodb+srv://xxx:<password>@xxx.xxx.mongodb.net/<dbname>?retryWrites=true&w=majority
mLabからMongoDB Atlasにデータ移行
完了すると MongoDB Atlas のメニューバーに mLab の項目が出るのでそこから migration を実行できます。
Heroku側での残り作業
Heroku にログインして mLab のアドオンや環境変数を削除してください。これで移行完了です。移行しない場合は、 heroku run rake errbit:bootstrap
を実行すれば DB の初期設定ができるかと思います。