前回は『OSS編~オーケストレーションツール Consul 03 Consul Cluster編~』と題して、オーケストレーションのConsulでClusterを試してみました。
今回は『OSS編~オーケストレーションツール Consul 04 KEY/VALUE DATA編~』と題して、オーケストレーションのConsulでKEY/VALUE DATA機能を試してみたいと思います。
KEY/VALUE DATA機能
ConsulではHTTP APIを利用して簡単なKey/Value store機能が利用できます。
例えば動的設定の保持やサービスとの連携、リーダーの選出等に利用できます。
試してみる
1.k/v storeの確認
最初に以下コマンドでk/v storeが空なのを確認します。
空だと404が返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ curl -v http://localhost:8500/v1/kv/?recurse * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 8500 (#0) > GET /v1/kv/?recurse HTTP/1.1 > User-Agent: curl/7.38.0 > Host: localhost:8500 > Accept: */* > < HTTP/1.1 404 Not Found < X-Consul-Index: 1 < X-Consul-Knownleader: true < X-Consul-Lastcontact: 0 < Date: Thu, 19 Mar 2015 11:29:53 GMT < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host localhost left intact |
2.登録
データを登録してみます。
curl のPUTを利用して登録します。
1 2 3 4 5 6 |
$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/key1 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/key2?flags=42 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/web/key3 true |
全データを取得して確認してみます。
1 2 3 4 5 |
Valueは全部「test」ですが、2個目はFlagsがついており、3個目ではKeyが階層になっているのがわかります。 $http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="}, {"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}, {"CreateIndex":343,"ModifyIndex":343,"LockIndex":0,"Key":"dev/web/key3","Flags":0,"Value":"dGVzdA=="}] |
次はKeyを指定して取得してみます。
1 2 |
$ curl http://localhost:8500/v1/kv/dev/key1 [{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="}] |
3.削除
登録したデータを削除してみます。
今回は「?recurse」を利用しているので再帰的に削除します。
1 2 3 4 5 6 |
$ curl -X DELETE http://localhost:8500/v1/kv/dev/web?recurse true $ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="}, {"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}] |
4.更新
データを更新してみます。
同じKeyで新しいPUTで更新出来ます。
1 2 3 4 |
$ curl -X PUT -d 'newval' http://localhost:8500//dev/key1 true $ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":371,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"bmV3dmFs"}, {"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}] |
また、「?cas=」を使う事で「chek and set」となります。
最後の「ModifyIndex」を指定する事で正となり更新されます。
1 2 3 4 |
$ curl -X PUT -d 'hello' http://localhost:8500/v1/kv/dev/key1?cas=371 true $ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":374,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"aGVsbG8="},{"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}] |
既に「ModifyIndex」が更新されているため、合致しないと以下の様にfalseとなります。
1 2 |
$ curl -X PUT -d 'hello' http://localhost:8500/v1/kv/dev/key1?cas=371 false |
データの取得時に「?index=」「wait=15s」を使って待つことが出来ます。
1 2 |
$ curl "http://localhost:8500/v1/kv/dev/key2?index=395&wait=15s" [{"CreateIndex":341,"ModifyIndex":400,"LockIndex":0,"Key":"dev/key2","Flags":0,"Value":"aGVsbG8="}] |
いかがでしたでしょうか?
次回もお楽しみに!!!