apache usergrid_ を使ってmBaas環境を構築してみる

※この記事は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 &lt;<a href=\"mailto:admin@example.com\">admin@example.com</a>&gt;",
      "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)

ではでは