Herokuアプリで使っていたmLab MongoDBをAtlasに移行した

2020/07/14 02:15:412020/08/02 15:54:26


先日Herokuから「今アドオンとして提供してるmLabのmongodbは2020/11/10にディスコンして全てのHerokuアプリから削除されちゃうので、それまでに自分で削除するのがおすすめです」みたいなメールが来た。
MongoDB社がmLabを買収したことによって、mLabのMongoDBのサービスを終了してAtlasに一本化する影響らしい。
  • mLab is now part of MongoDB, Inc., the company behind the database that powers your application(s). For background please read our announcement on October 9, 2018.

  • メールの中ではObjectRocketとかいうのが代替として挙げられていますが、mLabの無料枠で事足りていた人間には関係ないので普通にAtlasに移行しましょう
  • 事足りてなくてもAtlasに移行すべきな気がする、Addonだからってちょっとズレたのサジェストしてきてるでしょ
え〜めんどいな〜と思いつつまあどうせギリギリまで持ち越してやらんぐらいなら…と思って昨日今日で作業した。


勘所
  • 公式のマイグレーション手段に従うと、最終的なマイグレーションの段階でmLabのユーザーの権限がRead onlyに書きかわり、数分書き込めなくなる
  • 数分というのは多分データの保存してある量に合わせて伸びます
  • 自分のアプリではMongoDBに対して常に書き込みと読み込みが発生し続けているので、念のため一時的にアプリのdynoを落とした
  • 単体のMongoDBサーバではなくクラスタになる
  • え?
  • Primary, Replica, Replicaの三台構成になる
  • 無駄に豪華
  • よって、接続URLがmongodb+srv://... になる
  • クラスタ用の接続URL
  • TypeORMでも普通に繋げる

繋ぎ方
  • TypeORM
  • 手順の接続URLだと後ろにretryWrites=true&w=majorityがついてるけどこれをそのままコピペすると0.2.25では長すぎDB名判定されて接続できなかった
  • createConnectionに対してw: "majority"渡しつつ{extra: {retryWrites: true}}してやれば良いとは思うんですが、外しても多分問題ないと思う
  • 責任は負わん
  • Robo 3T
  • From SRVに接続URLブッ込めば勝手にパースしてくれる
  • Set nameがOptionalとか書いてあるから消しても良いんかな?と思いがち
  • 消すと繋がらん!
  • 繋いだらよくわかんない感じになる
  • コレクション、どこ…?
  • 伸ばして[P...を探す
  • Primaryのことです
  • [P...の列のノードをダブルクリック
  • db.getCollection("collectionName").操作内容
  • primary以外から操作するとこれはレプリカだよ〜んとエラー吐いて終わる
  • AtlasのWebUIからやった方が早い

さいごに
mLab今までありがとう


著者の画像

ci7lus

@ci7lus

Caramelize - Made withCaramelizeand / Privacy