natural born minority
GROWI
という「MongoDBをバックエンドにするアプリ」を運用し始めた基本「GROWIの”Deploy to Heroku”任せで構成を作った」ので、”mLab MongoDB add-on”というものが何か解ってなかったのですが…。
”mLab MongoDB add-on”は「HerokuでMongoDBを扱う場合の定番」だったようで、多くのアプリケーションで使われてると思われるadd-onです。
「MongoDBのストレージサービス(mLab)へのインスタンス作成・接続を勝手にやってくれるAdd-on」だったらしく、「じゃあその本体(mLab)へのログインとかどうすんの?」つーてーと、その「失われたサービス内に自動ログインの口が在った」らしいす。
…ま、上記も「もう消え去ったサービスを調べた結果」だったりするので、見ることすらできないのですが。
今回のデプロイアプリである GROWI
もそうなのですが、”Deploy to Heroku”タイプのアプリであれば、「構成上で自動で使われる」など、無意識で使ってる方も多かったのでは?と思います。
結論的には 公式が案内している別サービス(MongoDB Atlas)に移行 です。
Herokuに登録しているメールアドレスに
mLab Heroku Add-on Removed! (Heroku app: <アプリ名>)
という件名のメールが届いているはずなのでそれを探してください。
日本語に機械翻訳したものが以下です。
mLab からこんにちは、
予定どおり、<アプリ名>Herokuアプリにて、 mLab MongoDBHerokuアドオンがシャットダウンされました。
これは以前に接続されていた、次のmLabでホストされているサンドボックスデータベースに影響を与えました。
- mLab Database Deployment: <デプロイ名っぽいの>
- mLab Admin Username: <ユーザ名>
- mLab Admin Email: <登録メ-ルアドレス>
データへのアクセスを回復するには、すぐにMongoDBAtlasに移行する必要があります。
このmLabアカウントには、ユーザー名「<ユーザ名>」でログインできます。
パスワードがわからない場合は、ユーザー名を入力してくださいリセットフォームにし、
「<登録メールアドレス>」アドレスにメールで届く指示に従ってください。
移行に最も関連するドキュメント:
Migration FAQ:
https://docs.mlab.com/mlab-to-atlas/
Step-by-Step Guide to Migrating a Sandbox Heroku Add-on to Atlas:
https://docs.mlab.com/how-to-migrate-sandbox-heroku-addons-to-atlas/
このガイドでは、Atlas organizationを作成し、それをmLabアカウントに接続して、
mLabからAtlasへの移行をできるだけ簡単にするために特別に構築された
移行ツールにアクセスできるようにする方法を説明します。
ご不明な点がある場合や問題が発生した場合は、
このメール(support@mlab.com)に返信してサポートを受けてください。
敬具、
mLabサポート
mLabさんは「Herokuからはデタッチしたけど(いつまでと名言していないが)データ残してるから、はよ移行して」と言ってます。
このメールで「add-onが裏で自動的に作っていた、mLabアカウントにログインする方法」が解決します。
先ほどのメールに従い、 https://mlab.com/login/ の ”reset your password” からパスワードリセットし、一度ログインします。
ログインすると、 ”MongoDB Deployments” にて「デプロイされていたDB」が一覧されているので、メールに在った情報と一致しているか確認してください。
以下のサイトを参考に、mLabからAtlasに「データの移行」を行います。
(必須な作業ではないので、必要ないと判断すれば飛ばしてください)
ツール任せなので「安全に移行できている」はずですが…
気が気でなかったので、インスタンスが作成された時点で…
などしました。
docker run -it --rm -v "$PWD":/workspace -t mongo:4.4.1-bionic /bin/bash
# ---- ここからDocker内 ----
cd /workspace
mongo "mongodb+srv://<クラスタ名>.jrix1.mongodb.net/<ユーザ名>" --username <ユーザ名>
# コレクションとデータ内容をかくにんするなり、いろいろやって exit;
mongodump --uri "mongodb+srv://<ユーザ名>:<パスワード>@/<クラスタ名>.jrix1.mongodb.net/<ユーザ名>" -o <出力デイレクトリ>
Herokuのダッシュボードを表示し、 Settings -> Config Vars
へ遷移し、Reveal Config Vars
をクリックし、以下の変数を設定する。
MONGODB_URI
: mongodb+srv://<ユーザ名>:<パスワード>@<クラスタ名>.jrix1.mongodb.net/<ユーザ名>?retryWrites=true&w=majority
”mLab MongoDB add-on” は、DBを作成する際に「Config Varsに値も作る」のですが、「デタッチ時に削除する」というお行儀の良さ…なので、自力で定義します。
今回、対象アプリが GROWI
であったためこれだけで復旧しましたが、対象のアプリで上手く接続できない場合は「アプリの設定ファイル等を直接書き換えてみる」などして見てください。
「まーちょちょいで直るでしょ」→「おいおいこれはまずいぞ…(絶望と焦り」→「やっぱ公式に備えがあった(気を抜けないが微妙な安堵」
という「精神的な上下の変化での消耗が激しい」トラブルシュートでした。
…その前に「バックアップをこまめに取っていれば問題なかった」ハナシなのではあります。
(HerokuのDBと、GROWIのアプリ内エクスポートは、バックアップ自動化しにくいと個人的には思うのです…。)