mLab から MongoDB Cloud への移行

Sotaro KARASAWA
Crowi Book
Published in
Nov 5, 2020

長らく MongoDB as a Service としてやってくれていた mLab が終了します

Crowi は、OSSとして公開してから6年、Heroku Button からカンタンに立ち上げができますよ〜ということで標準の DB を mLab Add-on (かつては MongoHQ) から使わせてもらっていたのだけど、11/10 よりこれができなくなります。

というか既存の稼働中の Wiki を移管しないといけません … ということでその手順です。

MongoDB Cloud 上のアカウント新規作成

というわけで、稼働中の既存プロジェクトを MongoDB Cloud の sandbox plan に移行することを考えます。

Shared Clusters
左の Shared Clusters

M0 Sandbox プランは、以下のようなスペックです。

まずは MongoDB Cloud にアカウント、Organization、Project を作成し、Cluster 作成にすすみます。

Advanced Configuration Options から、Heroku Stack の稼働しているリージョンを選び (Heroku US Stack の Location は通常 North Virginia ですが EU Region を選んでいる人がいたら異なります)、M0 Sandbox を選択します。

Cluster 名はよしなに決めて次へ。

既存プロジェクのバックアップ

Heroku の Add-on 管理画面から SSO して mLab の Dashboard へ。(Config Vars からでも認証情報は取得できます。)

接続情報を確認したら (dbname は heroku が決めた任意の文字列になってる)、

mongo mongodb://dbuser:dbpass@ds1111.mlab.com:47599/dbname

それをもとに mongodump をとります。

mongodump mongodb://dbuser:dbpass@ds1111.mlab.com:47599/dbname

dump/dbname 以下に bson ファイルがずらずらと出力されてるはず。

MongoDB Cluster への restore

まずユーザーを作成するためにDatabase Accessのメニューから、Add Database User して名前・パスワードを作成。

また、Network Access のところは、Allow Access from Anywhere (0.0.0.0/0) の許可をします。コレについては AWS の VPC を繋いだりする方法はあるのですが、Heroku の outbound を固定できないので、IP Address による制限はできません。(やむなしというか Heroku ではよくあることなのですがちょっと気にはなりますよね。)

で、作成した Cluster の接続情報を確認し、まず接続確認します。

mongo "mongodb+srv://strkwikicluster0.ni5ar.mongodb.net/" -u <dbuser> -p <dbpass>

次に restore。

mongorestore だと少し option の指定の仕方が異なるので注意ですが、dump をとったそのディレクトリ構造のまま restore すると以下のようになる。

mongorestore -u <dbuser> -p <dbpass> 'mongodb+srv://<clustername>.mongodb.net/<dbname>'

で restore 完了。db name はこのまま restore すると Heroku による自動生成のままになりますが、まぁ特に気にしない。変えたい場合は変えてもよし。

完了後、MongoDB Cloud からもデータ確認。

こんなかんじ

接続情報の変更 & 動作確認

Heroku の Config Vars を手動で変更します。

で、app 再起動。

うまくいけばちゃんと Heroku から接続できてアプリケーションが動作します。

まとめ

  • mLab から MongoDB Cloud (Atlas) への移行をしました
  • mLab ありがとう

--

--

Sotaro KARASAWA
Crowi Book

Mercari, Inc. / Crocos, nequal, Ethna, PHP, Git, Python, C++, パーフェクトPHP, Red Bull, Cycling, Motor Sports, Perfume