前回は『 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$ curl -v http://localhost:8500/v1/kv/?recurse2* Hostname was NOT found in DNS cache3* Trying 127.0.0.1...4* Connected to localhost (127.0.0.1) port 8500 (#0)5> GET /v1/kv/?recurse HTTP/1.16> User-Agent: curl/7.38.07> Host: localhost:85008> Accept: */*9>10< HTTP/1.1 404 Not Found11< X-Consul-Index: 112< X-Consul-Knownleader: true13< X-Consul-Lastcontact: 014< Date: Thu, 19 Mar 2015 11:29:53 GMT15< Content-Length: 016< Content-Type: text/plain; charset=utf-817<18* Connection #0 to host localhost left intact2.登録
データを登録してみます。
curl のPUTを利用して登録します。
1$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/key12true3$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/key2?flags=424true5$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/dev/web/key36true全データを取得して確認してみます。
1Valueは全部「test」ですが、2個目はFlagsがついており、3個目ではKeyが階層になっているのがわかります。23$http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="},4{"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="},5{"CreateIndex":343,"ModifyIndex":343,"LockIndex":0,"Key":"dev/web/key3","Flags":0,"Value":"dGVzdA=="}]次はKeyを指定して取得してみます。
1$ curl http://localhost:8500/v1/kv/dev/key123[{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="}]3.削除
登録したデータを削除してみます。
今回は「?recurse」を利用しているので再帰的に削除します。
1$ curl -X DELETE http://localhost:8500/v1/kv/dev/web?recurse2true34$ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":339,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"dGVzdA=="},5{"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}]4.更新
データを更新してみます。
同じKeyで新しいPUTで更新出来ます。
1$ curl -X PUT -d 'newval' http://localhost:8500//dev/key12true34$ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":339,"ModifyIndex":371,"LockIndex":0,"Key":"dev/key1","Flags":0,"Value":"bmV3dmFs"},5{"CreateIndex":341,"ModifyIndex":348,"LockIndex":0,"Key":"dev/key2","Flags":42,"Value":"dGVzdA=="}]また、「?cas=」を使う事で「chek and set」となります。
最後の「ModifyIndex」を指定する事で正となり更新されます。
1$ curl -X PUT -d 'hello' http://localhost:8500/v1/kv/dev/key1?cas=3712true34$ 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$ curl -X PUT -d 'hello' http://localhost:8500/v1/kv/dev/key1?cas=3712falseデータの取得時に「?index=」「wait=15s」を使って待つことが出来ます。
1$ curl "http://localhost:8500/v1/kv/dev/key2?index=395&wait=15s"2[{"CreateIndex":341,"ModifyIndex":400,"LockIndex":0,"Key":"dev/key2","Flags":0,"Value":"aGVsbG8="}]いかがでしたでしょうか?
次回もお楽しみに!!!