能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

ParseServerを構築した話2020その4

諸事情でParseServerを構築する必要にせまられた際のメモ。ParseServerが結構モダン化しており、モダン化に伴いこちらの知識もアップデートする必要があった。ParseServerの構築は2017年ごろにBitnami が提供するParseServerを使ったのが最後で、一から構築サーバーを一から構築することになった。

作業を列挙すると、

  1. データベースの修復
  2. セキュア接続の確保
  3. Blobデータ格納先の修復
  4. CloudCodeの復元
  5. プッシュ通知の復元
  6. 外部との接続

となる。

今回は最後の外部との接続について、

AWSでParseServerを構築するためEC2 MarketplaceでBitnami が提供しているParseServerを選択し、MongoDBの復元、BLOB用の拡張機能を追加、プッシュ通知を有効化した。ここまでで内部的なセットアップは済んでいる。

EC上でセキュア通信(https)での接続を確立するためロードバランサー(LoadBalancer)にセキュア通信を任せて内部(LoadBalancer-インスタンス)ではhttpで通信する設定を加える(SSLターミネーションというらしい)。

ロードバランサーとインスタンスの設定についてはWeb検索ベースで結構みつかるのでその時点でのベストプラクティスを採用して欲しい。

serverURL

ロードバランサー経由でParseServerにアクセスするためには、ParseServerの設定を変更する必要がある。ssh経由で構築中のEC2インスタンスの、

stack/parse/config.json

のPaeseServerを外部からアクセスするURLを変更する必要がある。

変更箇所はserverURL をロードバランサーに設定したセキュア通信を有効化したドメインに変更する。

{
  ...
  "serverURL": "[サーバーのURL]",
  ...
}

AWSでParseServerを構築するとserverURLのURLはEC2上で割り当てられたIPv4アドレス/parse となっている箇所をセキュア通信のURL/parse に置き換えれば良い。置き換え後のserverURLは アプリ側でのParseServerのアクセス先と同じとなる。

publicServerURL

BLOBデータに対応していない場合は上記までで済む。AWSだとS3のバケットを使ったBLOBデータの書き込み/読み込み を許可することでBLOBデータを利用可能になるが、特にオプションを指定しないとParseServer経由でS3にアクセスし、BLOBデータの読み書きを行う形となる(S3直接アクセス禁止)。

BLOBデータはParseServer本来のアクセス経路ではないため、BLOBデータのためのURLを別途config.json に追記する必要がある。

{
  ...
  "publicServerURL": "[サーバーのURL]",
  ...
}

serverURL、publicServerURL を追記後、ParseServerを再起動しするとParseServerの外部アクセスの設定が完成する。

publicServerURL については、途中でファイルオブジェクトにアクセスできず、どうしてかと悩んだ末、以下の記事にたどりついている。

node.js - Difference between serverURL and publicServerURL on ParseServer - Stack Overflow

何しろParseServer情報源が少ない。2017年に比べると2020年のParseServer は安定しているものの、mBaaSのFirebase Cloud Firestore が優秀すぎるので新規サービスのバックエンドとしては(私も含めて)採用されないのは少し残念な話ではある。

参考

  1. parse-server-s3-adapter
  2. Parse Server Guide | Parse