前回の記事ではVaultとConsulの連携を行ってみたが、Vaultのリリースに対応してconsul-templateが0.9.0でVaultからも値を取得することができるようになったのでこちらも試してみた。
consul-templateのインストール。
# wget https://github.com/hashicorp/consul-template/releases/download/v0.9.0/consul-template_0.9.0_linux_amd64.tar.gz
# tar xvf consul-template_0.9.0_linux_amd64.tar.gz
# cp consul-template_0.9.0_linux_amd64/consul-template /usr/local/sbin/
consul-templateがVaultに接続できるようにするためには2つの環境変数VAULT_ADDRとVAULT_TOKENに値をセットする必要がある。
VAULT_ADDRはVaultのアドレス、VAULT_TOKENはvault init
やvault token-create
で取得したトークンをセットする。
# export VAULT_ADDR='http://127.0.0.1:8200'
# export VAULT_TOKEN=8c535adc-f7c7-32d7-09ae-14c32da1e6b6
ドキュメントを見ると設定ファイルを使えばvault {}内にこの辺りの設定を書けば良いように見えるが、実際やってみると書いた設定がまったく効いていなかった。
次のようなテンプレートファイルを作成すると、Vaultのsecret/templateのkey1の値がファイルに書き込まれる。
ドキュメントには「vault」ではなく「secret」と書かれている箇所があるが誤りである。
{{with vault "secret/template"}}{{.Data.key1}}{{end}}
Vaultのsecret/templateにkey1=value1をセットしておく。
# vault write secret/template key1=value1
consul-templateを起動してみる。
Consulのアドレスを指定していないが、ConsulとVaultとは完全に別のデータソース扱いのようで、consul-templateとVaultだけでも(つまり、Consulがなくても)利用することができるように見える。
# consul-template -template "/tmp/vault.tmpl:/tmp/_vault_" &
出力されたファイルを開けると先程セットした値が表示される。
# cat /tmp/_vault_
value1
consul-templateではConsulから値を取得している場合は、使用しているキーの変更がトリガーになってファイル書き換えが行われるが、Vaultの値が変更された場合はどうだろうか。
Vaultのsecret/templateのkey1の値を変更してみる。
# vault write secret/template key1=value1a
残念ながらファイルの方の値は変わらなかった。
Vaultの値変更はトリガーにはなってくれないらしい。
# cat /tmp/_vault_
value1
Consulからも値を取得するようにテンプレートを変更して、Consulの方の値を変更したらどさくさまぎれに一緒にVaultからの値も変更されないか見てみたが、変更されたのはConsulの方の値だけだった。
今のところVaultからはconsul-temnplate起動時にのみ値を読み込んでいるように見える。