※この記事はWeb API Advent Calendar 2014向けに書いてます。
最近何かと話題のBaaS/mBaaSを手軽に試せる環境が apache usergrid_です。
usergrid_はapacheインキュベータプロジェクトとして開発が進められています。
前提条件
usergrid_の環境を構築するためには以下のアプリケーションが事前にインストールされている必要があります。
- JDK 7以上
- apache Maven 3.0.0以上
- nodejs with npm
今回はJDK 7と、Maven 3.2.3を使って環境を構築しました。
usergrid_をgithubからcloneする
usergridはGitHubでソースが公開されていますので、以下のコマンドで取得が可能です。
$ git clone https://github.com/apache/incubator-usergrid.git
gitコマンドが使えない場合は、[Download ZIP]ボタンから最新版をダウンロードしてください。
stackのビルド
まずはBaaSのバックエンド部分のビルドを行います。
$ cd usergrid/stack
$ mvn clean install -DskipTests=true
正常にビルドが完了すると以下のようになります。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Usergrid Parent .................................... SUCCESS [02:31 min]
[INFO] Usergrid Java SDK 0.0.3 ............................ SUCCESS [ 28.372 s]
[INFO] Usergrid Build Tools ............................... SUCCESS [ 0.746 s]
[INFO] Usergrid Config .................................... SUCCESS [ 0.731 s]
[INFO] Usergrid Test Utils ................................ SUCCESS [ 45.073 s]
[INFO] Usergrid Core ...................................... SUCCESS [01:00 min]
[INFO] Usergrid Services .................................. SUCCESS [ 59.480 s]
[INFO] Usergrid MongoDB Emulator .......................... SUCCESS [ 8.184 s]
[INFO] Usergrid REST ...................................... SUCCESS [01:42 min]
[INFO] Usergrid Tools ..................................... SUCCESS [10:28 min]
[INFO] Usergrid Websocket ................................. SUCCESS [ 29.262 s]
[INFO] Usergrid Launcher .................................. SUCCESS [10:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28:47 min
[INFO] Finished at: 2014-12-15T13:39:06+09:00
[INFO] Final Memory: 67M/418M
[INFO] ------------------------------------------------------------------------
stackの起動と確認
早速stackを起動してみましょう。
$ cd launcher; java -jar target/usergrid-launcher-*.jar -db -init -nogui -p 8080
これでうまくいかない場合は
$ cd launcher
$ java -jar target\usergrid-launcher-1.0.1-SNAPSHOT.jar target\usergrid-launcher-1.0.1-SNAPSHOT-tests.jar -db -init -nogui -p 8080
を試してみてください。
起動に成功すると、コンソールに
INFO: [HttpServer] Started.
が表示されます。
stackが正常に起動したかを確認してみましょう。
curl http://localhost:8080/status
上記コマンドを打つと
{
"timestamp" : 1418618903513,
"duration" : 112,
"status" : {
"started" : 1418618885295,
"uptime" : 18218,
"version" : "1.0.1-SNAPSHOT",
"cassandraAvailable" : true,
"org.apache.cassandra.metrics.Cache.KeyCache" : {
"Capacity" : {
"type" : "gauge",
"vale" : "[disabled]"
},
"Entries" : {
"type" : "gauge",
"vale" : "[disabled]"
},
"HitRate" : {
"type" : "gauge",
"vale" : "[disabled]"
},
"Hits" : {
"type" : "meter",
"event_type" : "hits",
"rate" : {
"unit" : "seconds",
"count" : 7,
"mean" : 0.1900763526672633,
"m1" : 0.849142923597687,
"m5" : 1.2667723852503432,
"m15" : 1.3541025406748082
}
},
"Requests" : {
"type" : "meter",
"event_type" : "requests",
上記のような文字列が表示されます。※量が多いので全部は記載していません。
Organizationの作成
usergrid_はマルチテナントの仕組みとしてOrganization(組織)単位で管理しています。
早速、Organizationを作成してみましょう
$ curl -v -X POST -d 'organization=test-org&username=orgadmin&name=Administrator&email=admin@example.com&password=password' http://localhost:8080/management/organizations
organization=test-org:test-orgという名の組織を作成
username=orgadmin:orgadminというユーザ名を作成
name=Administrator:orgadminの氏名はAdministrator
email=admin@example.com:orgadminのメールアドレス
password=password:パスワードを設定
という意味になります。
* Adding handle: conn: 0x1c47190
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x1c47190) send_pipe: 1, recv_pipe: 0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> POST /management/organizations HTTP/1.1
> User-Agent: curl/7.33.0
> Host: localhost:8080
> Accept: */*
> Content-Length: 100
> Content-Type: application/x-www-form-urlencoded
>
} [data not shown]
* upload completely sent off: 100 out of 100 bytes
< HTTP/1.1 200 OK
< Content-Type: application/json
* Server grizzly/2.1.2 is not blacklisted
< server: grizzly/2.1.2
< Access-Control-Allow-Origin: *
< Date: Mon, 15 Dec 2014 05:57:52 GMT
< Transfer-Encoding: chunked
<
{ [data not shown]
100 976 0 876 100 100 1099 125 --:--:-- --:--:-- --:--:-- 1099{
"action" : "new organization",
"status" : "ok",
"data" : {
"owner" : {
"applicationId" : "00000000-0000-0000-0000-000000000001",
"username" : "orgadmin",
"name" : "Administrator",
"email" : "admin@example.com",
"activated" : true,
"confirmed" : true,
"disabled" : false,
"properties" : { },
"uuid" : "4e4588fa-841f-11e4-90ea-15a96252d281",
"displayEmailAddress" : "Administrator <admin@example.com>",
"htmldisplayEmailAddress" : "Administrator <<a href=\"mailto:admin@example.com\">admin@example.com</a>>",
"adminUser" : true
},
"organization" : {
"name" : "test-org",
"properties" : null,
"uuid" : "4e701b6a-841f-11e4-a73e-ab9984d6096d",
"passwordHistorySize" : 0
}
},
"timestamp" : 1418623071993,
"duration" : 622
}
* Connection #0 to host localhost left intact
status: “ok” となれば正常に作成されたことになります。
さいごに
インストールを駆け足で説明しましたが、お試しBaaS環境の構築は意外と簡単だったのではないでしょうか。
実際に使用するにはインターネットに公開する必要もありますし、REST APIのみで操作するのも大変ですのでUIがほしいところかと思います。
次回(あればw)はUIの構築について書いてみたいと思います。
また、BaaSについて詳しい話は「Web API Advent Calendar 2014」で、12/20にToshi Shibamotoさんが書いてくれると思います。(すみませんw)
ではでは