Parse.comからparse-server(Elastic Beanstalk)に移行する

Jun 15, 2016   #Parse  #AWS  #Android 

Parse.comが終了するということで、移行作業しました。この記事ではParse.comからparse-servermLabのフリープランを利用した移行メモです。クライアントとして利用していた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の互換性のため必要な場合は、サーバのほうでオプションで渡せるようです。その場合、サーバソースを変更する必要があります。

アフィリエイト