OSS編~オーケストレーションツール Consul 04 KEY/VALUE DATA機能編~

前回は『 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 intact

2.登録

データを登録してみます。

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="}]

いかがでしたでしょうか?

次回もお楽しみに!!!

この記事を書いた人

aws-recipe-user