Heroku で mLab add-on終了による Mongo DB atlas への移行


背景

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にデータ移行

下記のところからmLabにアカウント接続します。

完了すると MongoDB Atlas のメニューバーに mLab の項目が出るのでそこから migration を実行できます。

Heroku側での残り作業

Heroku にログインして mLab のアドオンや環境変数を削除してください。これで移行完了です。移行しない場合は、 heroku run rake errbit:bootstrap を実行すれば DB の初期設定ができるかと思います。