OSS編~オーケストレーションツール Consul 08 Watches編~

前回は『 OSS編~オーケストレーションツール Consul 07 ACLs編~ 』と題して、オーケストレーションのConsulでACLsを試してみました。

今回は『OSS編~オーケストレーションツール Consul 08 Watches編~』と題して、オーケストレーションのConsulでWatchesを試してみたいと思います。

Watchesとは

Watches は Consul が参照しているデータで変更を検出したときにハンドラを実行する機能です。

利用出来るデータは以下になります。

・key – KVのキー

・keyprefix – KVストアのPrefix

・services – サービスのリスト

・nodes – ノードリスト

・service- インスタンスのサービス

・checks – ヘルスチェックのバリュー

・event – カスタムユーザーイベント

試してみる

1.nodes

先ずはnodesを試してみます。

Consulサーバを立ち上げておきます。

1$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=agent-one

次にHandlerを記述しておきます。

nodes情報を取得してログを残します。

1$ sudo vim /usr/bin/my-nodes-handler.sh2#!/bin/bash3curl localhost:8500/v1/catalog/nodes > /tmp/nodes.log4$ sudo chmod 755 /usr/bin/my-nodes-handler.sh

別ターミナルからwatchを起動します。

1$ consul watch -type nodes /usr/bin/my-nodes-handler.sh

ログの最初の状態を確認してみます。

1$ tail /tmp/nodes.log2[{"Node":"agent-one","Address":"10.0.1.86"}]

それでは2台目をjoinしてみましょう。

1$ consul agent -data-dir /tmp/consul -node=agent-two2$ consul join 10.0.1.86

watchが動作しているかログを確認してみます。

更新されているのが分かります。

1$ tail /tmp/nodes.log2[{"Node":"agent-one","Address":"10.0.1.86"},{"Node":"agent-two","Address":"10.0.1.87"}]

2.keyとkeyprefix

次はkeyとkeyprefixを試してみます。

KV用のHandlerを作成します。

1$ sudo vim /usr/bin/my-key-handler.sh2#!/bin/bash3curl http://localhost:8500/v1/kv/?recurse > /tmp/kv.log4$ sudo chmod 755 /usr/bin/my-key-handler.sh

keyでwatchを実行します。

1$ consul watch -type key -key test/value /usr/bin/my-key-handler.sh

空なのを確認します。

1$ tail /tmp/kv.log

KVをPutしてみます。

1$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value2true

確認してみます。

1$ tail /tmp/kv.log23[{"CreateIndex":24,"ModifyIndex":24,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]

削除してみます。

1$ curl -X DELETE http://localhost:8500/v1/kv/test/value2true

更新されて空になるのが確認出来ます。

1$ tail /tmp/kv.log

keyprefixを試してみます。

keyprefix でwatchを起動します。

1$ consul watch -type keyprefix -prefix test/ /usr/bin/my-key-handler.sh

試してみます。

1$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value2true3$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/test4true

確認してみます。

1$ tail /tmp/kv.log23[{"CreateIndex":32,"ModifyIndex":32,"LockIndex":0,"Key":"test/test","Flags":0,"Value":"dGVzdA=="},{"CreateIndex":31,"ModifyIndex":31,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]

削除でも確認してみます。

1$ curl -X DELETE http://localhost:8500/v1/kv/test/test2true34$ tail /tmp/kv.log56[{"CreateIndex":31,"ModifyIndex":31,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]

3.event

最後にeventも試してみます。

event用のHandlerを作成します。

1$ sudo vim /usr/bin/my-event-handler.sh2#!/bin/bash3date > /tmp/date.log4$ sudo chmod 755 /usr/bin/my-event-handler.sh

event でwatchを起動します。

1$ consul watch -type event -name datetime /usr/bin/my-event-handler.sh

確認します。

1$ tail /tmp/date.log2Thu Apr  2 04:57:18 UTC 2015

別ターミナルからeventを実行します。

1$ consul event -name datetime2Event ID: ed708247-abac-30ef-6c4b-16b902176e7b

更新されているのが分かります。

1$ tail /tmp/date.log2Thu Apr  2 04:58:34 UTC 2015

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

次回もお楽しみに!!!

この記事を書いた人

aws-recipe-user