HerokuでMongoDBのアドオンのmLabが終了するので、別のMongoBD無料サービスにマイグレーションした時のメモ

# 概要

Herokuで無料で利用可能なMongoDBのアドオンであるmLabのサービス終了に伴い、後継の無料利用可能なMongoDBサービス（MongoDB Atlas）に移行した際の方法のメモです。

画面操作手順が多く、一部の手順等を省略しておりますが、移行時の参考になればと思います。


# 背景

Heroku上で無料プランのみで、Railsで作成した趣味のWebサイト(※)を構築しており、
その中でMongoDBが無料利用可能なmLabアドオンを使用していました。
無料プランですと容量等、色々と制限がありますが、小規模で使用する分には問題ない形で使用できていました。

[※作成したWEBサイト:駿河部](https://surugabu.com)

ですが、7/11頃に下記のようなメールが届いていました。

<img width="540" alt="mail" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/184ff122-09ed-c11c-fa0e-97edeee17bd2.png">

要約すると、2020年の11月10日にmLabのMongoDBのアドオンは削除されて使用できなくなるという事となります。

詳細は下記に記載されていますが、mLab自体がMongoDB本体の会社(MongoDB Inc)に買収されたことに伴い、そちらのクラウドサービス(MongoDB Atlas)に統合されるためのようです。
[参考](https://docs.mlab.com/shutdown-of-heroku-add-on/)

幸いにもサービス停止に伴い、MongoDB Atlas側へ無料利用可能なプラン(512MBまで利用可能)へのマイグレーション方法が案内されており、今回はそちらのプランへのマイグレーションを実施した際の記録になります。


# 手順

## MongoDBの対応バージョンの確認

mLabで動いていたMongoDBのバージョンは3.6ですが、MongoDB Atlasは4.2となるため、使用しているmongoidやrubyのバージョンに注意が必要です。
今回私の場合には4.2に対応しているバージョンを使用しており、幸いにも対応は不要でした。
バージョン等の対応に関しては下記が参考になります。
[参考](https://docs.mongodb.com/mongoid/current/tutorials/mongoid-installation/)

## アカウント作成

https://www.mongodb.com/cloud/atlas
にアクセスして、Atlasアカウントを作成します。
(詳細は割愛しますが、メールアドレスやパスワードを入力し、メールのアクティベーションを実施してください。)
<img width="581" alt="スクリーンショット 2020-07-20 21.21.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/3f6cb710-2f83-dc4f-b25f-05aadbfad8ce.png">

### Clusterを作成

ログイン後、クラスターを作成します。
Clusters　→　Build a Clusterを選択します。

<img width="1046" alt="create.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/8a5f5484-9800-1ee3-d09c-b79af588eed9.png">

Freeプランを選択します。

<img width="1055" alt="Free.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/a2cca047-184f-0856-5935-bccf4f03ee92.png">

AWS, GCP, Azureやリージョン等の選択ができますのでお好みで選択してください。
<img width="903" alt="reagion.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/611e7e28-4d7f-2c62-0c47-4eeb42e88870.png">

Clusterが作成できれば完了です。

<img width="695" alt="clu2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/5e112069-595d-5f1a-8ecf-5fa50a06e97b.png">

### mLabアカウントとの接続

画面左上の歯車アイコンを選択します。

<img width="268" alt="setting.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/e2101cae-8203-f087-475c-8c6921ffa5f1.png">

Connect to mLabといった項目があるので右側のボタンを選択します。
 
<img width="1070" alt="mLab" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/d6dbdbe7-e624-d7c4-62cc-003d69783cd0.png">

mLabのログイン画面に移動するのでログインします。
<img width="785" alt="mlab.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/07f4b0f3-f8d9-9657-1a2c-a9eed34d935d.png">

なお、mLabのアカウントが不明な場合には一度Herokuにログインして、mLabを使用しているアプリ内のAddonsのmLabを選択するとログインできるのでその後、上記のログイン画面でリロードするとログインできます。

<img width="626" alt="heroku.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/c56111f7-50b9-c282-acd2-4beebd76151a.png">

ログイン完了後に、ダイアログが表示されるのでAutorizeで連携を許可します。
<img width="519" alt="auth.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/4ec4839a-f250-94cd-4f15-ebd6060d29db.png">


Atrasの画面に戻って、mLab Accountの画面が表示されれば連携が完了です。

<img width="208" alt="mLabCon.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/c1674339-0e85-24c2-6a23-e018bb6666d3.png">


### マイグレーション設定

mLab Accountの画面でActions → ... → Configure Migrationを選択します。

<img width="276" alt="mlabcon1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/55b48c4a-6115-7dff-5cc3-a87e7d53fb61.png">

Create or Select a projectを選択します。
<img width="649" alt="cop.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/c8a652fb-0fe8-8975-4ec5-4e02ced17af3.png">

プロジェクトを選択して　Confirm ~　を選択します。
(デフォルトであればProject 0)
<img width="280" alt="t1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/a0ed5509-e6ed-f0be-2756-76feefd40b83.png">

mLabから引き継いだアカウント情報などが表示されるので確認及び、importにチェックがついていることを確認して、 Import ~ を選択します。
<img width="666" alt="import.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/610413ad-3163-d8f8-25e3-8e01a4e36b23.png">

Allow ~ のチェックボックスにチェックを入れて、右下のボタンを選択します。

<img width="675" alt="Allow.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/2f556c46-3e5c-5a71-03ff-59a563f9cd3d.png">

作成したClusterを選択して、右下のボタンを選択します。

<img width="655" alt="clus.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/9575e6ca-41ba-a386-3935-86adbb66f53a.png">

マイグレーションの設定が完了しました。
<img width="861" alt="fin1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/4430f55c-407a-4864-b44b-308822934d84.png">

### マイグレーション実行

Migrate DeploymentのConfirmを選択します。

<img width="953" alt="mig1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/071f5521-7abd-fbc3-6ddd-9df7f7b0ee02.png">

Confirm And Continueを選択します。

<img width="197" alt="mig2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/60205537-1a90-5507-7d08-cb8e81d589eb.png">

チェックボックスにチェックを入れずに、Begin Test Runを選択します。
<img width="670" alt="mig3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/0e67c6b3-8115-d6e6-f970-fd0a32f9660f.png">

マイグレーションが始まるので、完了するまで待ちます。
<img width="960" alt="mig4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/efad074a-6d47-7bec-a0ca-7054a1d205f2.png">

マイグレーションが無事に成功したら、Confirm Connectivityを選択します。
<img width="955" alt="mig5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/8e7c2f20-3306-c6c2-d96a-285f987a104e.png">

Confirm ~ を選択します。
<img width="668" alt="mig55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/965757cf-b36e-144e-445a-d01fceedc12f.png">

チェックボックスにチェックを入れて、Begin Migrationを選択します。
(下記では、アプリケーションを事前に止めるように注意しているのでheroku ps:scale web=0等のコマンドで予めアプリを止めた方が無難です。)
<img width="668" alt="mig6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/9bb975c2-8724-3e19-7ff3-b8fe24d7d104.png">

マイグレーションが始まるので待ちます。
しばらくすると完了するので、Start Using Atlasを選択します。

<img width="893" alt="migfin.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/e0f57fc9-3f13-1cc1-15a6-c6379ae36136.png">

MongoDBの接続URLの情報の雛形が表示されるので、コピーした上で
username及びpasswordに関してはherokuで使用していた値に置き換えて使用します。
<img width="670" alt="con.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/2e19055b-9391-d0c9-e266-1fac9574ddd8.png">

herokuの環境変数を使用している場合には、下記のように環境変数を新しい値に書き換えます。
heroku config:set 環境変数名="上記の接続URL"


### アプリの起動

Herokuのアプリを止めている場合には、再立ち上げを行います。
MongoDBを使用している機能が動くこと確認してください。


## 後始末

HerokuのmLabのアドオンを消します。
下記等を参考に予めバックアップを取ることが推奨されているので任意で実施してください。
https://docs.mlab.com/backups/#retention-policies

また、mLabを削除すると自動で追加されたMONGODB_URI"や"MONGOLAB_URI等の環境変が削除されるとの事ですので、
heroku config等で環境変数の値を出力してバックアップしておく事が推奨されています。


Herokuにログインを行い、Configure Add-onsを選択します。
<img width="608" alt="herokuaddons.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/17749d6b-1d91-5259-e774-d353b82dface.png">

mLabのDelete Add onを選択します。
確認ダイアログが表示されるのでアプリ名を入力して削除します。
<img width="1232" alt="delmongo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/7351d13f-c709-62a6-0eab-9fbc53e40e1e.png">

以上でHeroku側のmLabの削除が完了しました。
念のためMongoDBを使用した機能が動くか確認してみましょう。

## まとめ

Heroku上で動くMongoDBのアドオンのmLabの終了に伴い、代替サービスとなるMongoDB Atlasへ移行時の方法のメモを紹介しました。

手順が多く大変でしたが、無事マイグレーションできたので一安心しました。