Parse.comからparse-server(Elastic Beanstalk)に移行する
🗓️ 2016-06-15Parse.comが終了するということで、移行作業しました。この記事ではParse.comからparse-serverとmLabのフリープランを利用した移行メモです。クライアントとして利用していたAndroidアプリも修正しています。画像なんてない。
これからParse.comからの移行を検討される場合は、Parseの利用をやめることを含めて十分な検討をしたほうがいいでしょう。parse-serverへ移行する場合の基本的な流れは公式で公開されています。またparse-serverを利用する場合、非常に沢山のコミュニティが移行方法を公開しています。自分の好きな環境がないか確認するといいです。
今回はparse-serverをElastic Beanstalkを利用してEC2上にデプロイし、Parse.comのデータをmLabに移行しました。
mLabのフリープランを検討する場合いくつか注意点があります。mLabは500MBインスタンスを無料で使用できます。しかし、これはシングルノードかつ共用インスタンスです。あとからスケールさせる場合再度移行作業が必要になります。またAWS, GCP、Azureでフリープランが用意されていますがリージョンが固定です。AWSの場合バージニアのみになります。
Parse.com to mLab
mLabのアカウントを作成後、DBを作成する。
- [Create New]ボタンを押す
- Cloud provider: AWS
- Plan: Single-node:Sandbox (shared 0.5GB) FREE
作成したDBを開く。parse-serverで使用するユーザを作成する。
- Usersタブを開く
- [Add database user]ボタンを押す
- username/passwordを入力(Make read-onlyはチェックしない)
画面上部に表示されているURIをコピーする。
mongodb://<dbuser>:<dbpassword>@sample.mlab.com:13584/parse-server-sample
Parse.comからmLabにデータを移行する。
- Parse.comからデータを移行するアプリを開く
- [Analytics] - [Overview]でData storageが500MBより少ないことを確認
- [App Settings] - [General] - [Migrate]ボタンを押す
- 表示されたダイアログ内に先ほどコピーしたURIを貼り付け
- SSLの利用を推奨しますという警告が表示されるが、mLabのフリーではSSLを利用できないため[Migrate anyway]ボタンを押す
マイグレーション完了後、[Finalize]ボタンを押すことでParse.comの管理画面がmLabのホストを参照するようになります。Finalize完了後はParse.comのホストに再度戻すということはできないので注意。
あとで必要なので、[App Settings] - [Security & Keys]から各キーをメモしておきましょう。実際に必要なのは[Application ID]と[Master key]だけです。
もしデータ移行に失敗する場合は、mLabにfailIndexKeyTooLongの設定が必要かもしれません。mLabフリープランの場合は共用インスタンスなので変更できません。ほかの方法でmongodbを運用する必要があります。
参考: Set the failIndexKeyTooLong parameter to false
parse-server on Elastic Beanstalk
parse-serverをElastic Beanstalkを使ってデプロイします。
上記記事中の[Deploy to AWS]ボタンからアプリケーションを作成。この時、リージョンがバージニア固定になります。もしリージョンを変更する場合、アプリケーションバージョンで指定されているS3のURLからソースをDLして、zipとしてデプロイすればよいです。
Beanstalkが起動完了したら、parse-server用の環境変数を設定します。
- [設定]-[ソフトウェア設定]
- 環境プロパティ
- APP_ID (ParseのApplication ID)
- DATABASE_URI (mLabのURI)
- MASTER_KEY (ParseのMaster Key)
- [適用]ボタンで環境に反映
CURLでAPIの確認をします。
$ curl -X GET \
-H "X-Parse-Application-Id: YOUR-APP-ID" \
-H "X-Parse-Master-Key: YOUR-MASTER-KEY" \
http://example.us-east-1.elasticbeanstalk.com/parse/classes/Example
デプロイしているプロジェクトをローカルにダウンロードします。ebコマンドは最新版にアップデートしましょう。labsコマンド初めて使った。
$ mkdir parse-sever && cd parse-sever
$ eb init
$ eb labs download
parse-dashboard
ついでなのでparse-dashboard試しました。サーバ立てるの勿体無いのでローカルでの実行です。
$ mkdir parse-dashboard && cd parse-dashboard
$ npm install --save parse-dashboard
$ touch parse-dashboard-config.json
設定書きます。
{
"apps": [
{
"serverURL": "http://example.us-east-1.elasticbeanstalk.com/parse",
"appId": "YOUR-APP-ID",
"masterKey": "YOUR-MASTER-KEY",
"appName": "YOUR-APP-NAME"
}
]
}
実行。
$ $(npm bin)/parse-dashboard --config parse-dashboard-config.json
npmのグローバル入れるの嫌だっただけなので通常は-g指定でinstallすればいいと思います。
Androidアプリの修正
SDKの更新が必要とのことなので、アップグレードします。
jarファイルを直接libに放り込んでたのでgradle管理に変更しました。またParseCrashReportingはDeprecatedになったということで、削除しています。
参考: Missing ParseCrashReporting #247
libsにあったbolts-android,Parse,ParseCrashReportingのjarを削除したあと、build.gradleファイルに下記を追加する。
dependencies {
...
compile 'com.parse:parse-android:1.13.1'
...
}
SDKの初期化部分を更新する。コンテキストを渡すthis部分は適宜書き換えて下さい。
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId("YOUR-APP-ID")
.clientKey(null)
.server("http://example.us-east-1.elasticbeanstalk.com/parse/") // 最後のスラッシュは必要
.build()
ソース上でParseCrashReportingを呼び出していた箇所は削除しましょう。
以上で移行完了です。お疲れ様でした。
その他
AndroidのほうでclientKeyがnull指定になっていますが、parse-server移行後は必要ない模様。 参考: https://github.com/ParsePlatform/parse-server#client-key-options
過去のSDKの互換性のため必要な場合は、サーバのほうでオプションで渡せるようです。その場合、サーバソースを変更する必要があります。