概要
現時点で envconsul バイナリは配付されておらず、動作の確認を行うには、Go 言語のコードを取得し、ビルドする必要があります。以下、ビルドし、簡単にテストするまでの手順をまとめます。
envconsul とは?
envconsul
は、環境変数の取得・設定を行うためのツールです。 Consul のキーバリュー・ストア( 以下 KVS )と連携し、リモートの KVS 上のデータを参照したり、データの変更をトリガに任意のコマンドを実行する事ができます。envconsul の開発を行っているのは、Vagrant や Serf、Consul を提供している Hashicorp 社です。
事前準備
予め、各 OS 環境において、Go 言語の開発環境が必要です。
次に、Consul と連携する必要があるので、Consul のセットアップと、HTTP インターフェースを有効化する必要があります(デフォルトで、Port 8500 が利用出来ます)。
envconsul のビルド
README 等には特に書かれていませんが、consul-kv
も別途必要になります(先に envconsul をビルドしようとしても、エラー 「watch.go:13:2: cannot find package "github.com/armon/consul-kv」が表示されてしまいます)。
また、作業にあたり、環境変数が export GOPATH="$HOME/go"
と指定されているものとして、以下進めます。
作業用のディレクトリを作成します。
$ mkdir -p ~/go/src/github.com/armon
$ cd ~/go/src/github.com/armon
$ git clone git@github.com:armon/consul-kv.git
これで、consul-kv のコードが展開されます。
次に envconsul のコードを取得します。以降の作業場所は、どこでも構いません。
$ cd ~/src/
$ git clone git@github.com:hashicorp/envconsul.git
$ cd envconsul
$ go build
ビルドが終わると、作業ディレクトリ内に envconsul
のバイナリが作成されます。
実行すると、次のようにヘルプが表示されます。
$ ./envconsul
Usage: envconsul [options] prefix child...
Sets environmental variables for the child process by reading
K/V from Consul's K/V store with the given prefix.
Options:
-addr="127.0.0.1:8500": consul HTTP API address with port
-dc="": consul datacenter, uses local if blank
-errexit=false: exit if there is an error watching config keys
-reload=false: if set, restarts the process when config changes
-sanitize=true: turn invalid characters in the key into underscores
-upcase=true: make all environmental variable keys uppercase
動作テスト
envconsul
の書式は、次の通りです。
$ envconsul -addr="ホスト名:ポート番号" prefix名 実行コマンド
prefix名
とは、Consul の KVS 上の キー名
の事です。また、オプションで -reload
で、KVS の対象キーの値が変更したタイミングで、指定した実行コマンドに新しい環境変数を引き渡します。
Prefix に当たるデータは、Consul の WebUI から作成します。http://ホスト:8500/
にアクセスすると、UI が表示されます。上のメニューの Key/Value
を押して、画面を切り替えます。
次に、'Create Key' でtest/enabled
、値をfalse
として、create
を押します。これは、prefix test
の、キー(環境変数) enabled
に対する値が true
であるという指定です。
このデータを envconsul で参照するには、次のようにします。
$ envconsul -addr="sakura1.pocketstudio.net:8500" test env | grep ENABLED
ENABLED=true
このあとは、WebUI で値を変えると、その情報が反映することが確認できます。
次は、-reload
を試します。以下のコマンドを実行した後、再び WebUI で値を操作すると、そのタイミングでコマンドが実行できます。
$ envconsul -addr="sakura1.pocketstudio.net:8500" -reload test /bin/sh -c "
uptime; /bin/sleep 1d"
22:15:51 up 90 days, 2:15, 1 user, load average: 0.36, 0.52, 0.49
22:15:58 up 90 days, 2:15, 1 user, load average: 0.31, 0.50, 0.49
22:16:01 up 90 days, 2:15, 1 user, load average: 0.31, 0.50, 0.49
この例では uptime を実行しましたが、任意のプログラムを実行させることができます。また、環境変数の値も、reload 時には、常に最新のものを引き渡せすことが可能です。
参考
- envconsul
- https://github.com/hashicorp/envconsul
- Twelve-Factor Applications with Consul - HashiCorp
- http://www.hashicorp.com/blog/twelve-factor-consul.html