Apache Jena FusekiをHerokuで運用する手順(ただしReadOnlyのデータセットのみ)
このエントリでは、
Apache Jena FusekiというSPARQLサーバを、
Heroku上で運用する手順を示します。
但し、ReadOnlyのデータセットのみを対象とします。
Apache Jena Fuseki
https://jena.apache.org/documentation/fuseki2/
ここで示す手順は、次のような運用を想定しています。
SPARQLで公開するデータをGitHub上で管理し、
データ追加・編集をPullRequestで受け付けて、
masterブランチにmergeされたら、
HerokuのDeployのGitHub連携で自動的にサービスを更新する。
このエントリでは、以下のリポジトリのサンプルコードを使用します。
README.mdにも手順の説明を記載しています。
takemikami/jena-fuseki-heroku-sample | GitHub
https://github.com/takemikami/jena-fuseki-heroku-sample
仕組みの概要
Fusekiは、Javaで実装されたSPARQLサーバです。
ホストするデータセットは、
永続化不要な場合は、メモリー上に保持し、
永続化が必要な場合は、TDBという仕組みでディスク上に保持します。
Herokuの場合は、
Dynoがシャットダウンすると、メモリ・ディスクともに破棄されてしまうので、永続化されません。
そこで、Dynoのイメージをビルドする際に、
ホストしたいデータセットをTDB形式にして、イメージに含めてしまうことにします。
まとめると、以下のような処理の流れになります。
# イメージのビルド・Dynoの起動は、
# masterブランチにmergeされた時に実行されます。
イメージのビルド時の流れ
- fusekiをダウンロードする
- tdbのcliをダウンロードする
- tdbloader2でtdbファイルを生成する
Dynoの起動時の流れ
- ビルド時に生成したtdbを指定して、fusekiを起動する
注意点
以上で説明した仕組みでデータセットをホストするため、
Fusekiの機能について、次のような点に注意が必要です。
- サーバでデータ追加・更新を受け付ける事が出来ない
- アクセス数などの統計情報が保持されない
逆に言うと、これらを許容出来る場合は、
Herokuの仕組みに乗って、運用することが可能です。
構築手順
構築手順はGitHubのREADME.mdに書いている通りなのですが、以下に記載しておきます。
- 本リポジトリをcloneする。
git clone git@github.com:takemikami/jena-fuseki-heroku-sample.git
GitHubのGUIでデータセットを運用するリポジトリを作成する。
作成したGitHubのリポジトリに、本リポジトリのコピーをpushする。
cd jena-fuseki-heroku-sample
git remote remove origin
git remote add origin git@github.com:{your name}/{your project}.git
git push origin master
HerokuのGUIで、新しいappを作成する。
新しいappのDeployタブから、データセットを運用するリポジトリを指定して、GitHub連携を設定する。
※この時、ブランチはmasterを指定します。デプロイ完了後、Open appでページクエリを実行出来ることを確認する。
データセットの名称を変更する。
- run/config.ttl ... fuseki:nameでsampleとなっている箇所
- webapp/index.html ... form actionのパスでsampleとなっている箇所
- dataset配下のデータセットの定義を編集する。
以降は、datasetの変更をmasterブランチにpushする度に、自動的に反映されるようになります。
この仕組みでFusekiを運用すれば、次のメリットがあると考えられます。
- サーバへのデータロードのオペレーションが不要になる
- データ量・アクセスが少なければ、Heroku無料の範囲内で運用できる
趣味レベルで整理したデータなどがあれば、
この方法で、気軽にホストしてみてはいかがでしょうか。