Get value from Vault with Terraform
この前terraformのvaultプロバイダを使おうとした所うまくいきませんでした。
そこで、もう少し単純なコードで書き直して検証してみたところ、うまくvaultから値を取ってこれたのでその方法をメモしておきます。
準備
MacでVaultを起動しておきます。検証なのでdevモードで起動します。起動したら、出力に出るRoot Token
の値をメモしておきます。
brew install vault
vault server -dev
環境変数に必要な値をセットしておきます。
export VAULT_ADDR="http://127.0.0.1:8200"
export VAULT_TOKEN="Root Tokenの値"
main.tfを書く
こんなmain.tfを書きました。
- vaultに
secret/do
というpathを作成し、token=XXXXXXXX
というkey/valueをセットする - データソースにvaultを指定し、作成したpathからfetchできるようにする
- outputで値をfetchして表示する
resource "vault_generic_secret" "do" {
path = "secret/do"
data_json = <<EOT
{
"token": "XXXXXXXX"
}
EOT
}
data "vault_generic_secret" "do" {
path = "secret/do"
}
output "do_token" {
value = "${data.vault_generic_secret.do.data["token"]}"
}
うまくいった
Yay!
$ terraform apply -input=false
vault_generic_secret.do: Refreshing state... (ID: secret/do)
data.vault_generic_secret.do: Refreshing state...
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
do_token = XXXXXXXX
よくわからなかったところ
まずresource "vault_generic_secret" "do"
の項目以外をコメントアウトして実行、その次に他の行をコメントアウトして実行、というようにしないとクラッシュしてしまった。vaultに既に値がある状態じゃないとうまく実行できない感じ。
前回試したときとさほど大差ないmain.tfの内容だと思うけどできたりできなかったりする理由は何なんだろう...。
感想
一応terraformのソースコードを見ながら試していったんだけど、うまく参考に出来なかった。
経験とか勘で動くようにごにょごにょするのはあまり得るものが無いと思うので(それによくわからないというもやもやが残るし...)もっとコードを読み込んでいきたい。