Edited at

RiakCSにアタッチして、簡単なAPIを検証する

More than 3 years have passed since last update.

RiakCSは大量なデータを保存する手段の一つで、プライベートストレージに使うのはいい選択でもあります。

RiakCSを動かすにはRiak, Stanchion, RiakCSが必要です。

RiakCSのインストールに関してはここに記述されています。

RiakCSはErlangに書かれているため、起動されると、ErlangのRuntime Systemが動きます。

RiakCSにアタッチするとRiakCSが提供している全てのPublic APIが使えるようになります。

いくつかのAPIを試してみたいと思います。まずRiakCSにアタッチします。

# sudo su

# riak-cs attach

まずユーザー作成します。

1> {ok, User} = riak_cs_user:create_user("fake-name", "fake-name@example.com").

{ok,{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled}}

2> User.
{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled}

上に作成されているUserはいろんなところで使うことができます。

このユーザーは管理者であるかどうかをチェックします。

3> riak_cs_user:is_admin(User).

false

falseなので、一般ユーザーになっています。

すべてのユーザーののキーをリストアップしてみます。

4> {ok, RcPid} = riak_cs_riak_client:checkout().

{ok,<0.571.0>}
5> riak_cs_user:fetch_user_keys(RcPid).
{ok,[<<"0HXABCDEFJ-BR4LQ9SCF">>,<<"2UEQRP_ABCDEFRKOEKOY">>,
<<"COW-7ABCDEFAWY4H3-PN">>,<<"CZOCABCDEFWA_STA_UWK">>,
<<"LIF-FUEJDLPABCDEFEGH">>,<<"WU2OZPPF-ABCDEFXRX7A">>]}

RiakCS中の特定のユーザーの情報を取得してみます。

6> riak_cs_user:get_user("LIF-FUEJDLPZWENSZEGH", RcPid).

{ok,{{rcs_user_v2,"fake-name","fake-name",
"fake-name@example.com","LIF-FUEJDLPZWENSZEGH",
"MaWqrVs04OEVUPn9oGbu4ov-BSsh01v12LWUiw==",
"3fcf010cfbc6baa2c8dae4857b4399498f015f373cb3ca46ac1bb15ef69e2b44",
[],enabled},
{riakc_obj,<<"moss.users">>,<<"LIF-FUEJDLPZWENSZEGH">>,
<<107,206,97,96,96,96,204,96,202,5,82,60,202,156,255,126,
206,176,251,162,194,...>>,
[{{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],...},
{{[],[],[],[],[],[],[],[],...}}},
<<131,104,9,100,0,11,114,99,115,95,117,115,101,114,95,
118,50,...>>}],
undefined,undefined}}}

バケットのアクセス権限を取得してみます。

riak_cs_acl:fetch_bucket_acl(<<"test9">>, RcPid).

{ok,{acl_v2,{"madfrogme001",
"98e7c6cfe1a1bcbc85c2befdbfb43fe0b8339379d5cc0f2160fabc055039440a",
"CZOC9SNTQRWA_STA_UWK"},
[{{"madfrogme001",
"98e7c6cfe1a1bcbc85c2befdbfb43fe0b8339379d5cc0f2160fabc055039440a"},
['FULL_CONTROL']}],
{1445,953267,673635}}}

実際これらのAPIを使うにはソースコードの参照が必要で、

https://github.com/basho/riak_cs/tree/develop/src

実際にRiakCSがRiakと通信する時にriak-erlang-clientを大いに頼っています。

https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl