in Develop, Server

Terraform 0.12ことはじめ


前職ではSREなのってたけどTerraform使ったことないというあるまじき状況だった。なんでや。

新しい仕事先でちょうどGCPを管理する権限をいただいたので、Terraform0.12でGoすることにした。とはいえ、情報が古いものも多く、どうかくのかわかんねーとかいうのも。

お金。

細かいやり方なので、正直こうするのがベストいプラクティスってわけのもんじゃない。

変数

terraformコマンドは実行した階層のtfファイルを全部読み込んでくれるので、variable.tfに記述していく。

variable “なんとかかんとか”っていう書き方。そのあとdefaultってのがあるんだけど、この中はworkspaceごとの設定を書く。僕は環境ごとに入れる値を変更したかったので、workspaceをつかった。ので、こういう書き方になった。とくに分けることもないならdefaultイコールなんちゃらでいいみたい。

tfファイル

実際に書くtfファイル。

GCPのVPCを作る設定。なんか詳しいのは公式ドキュメントみればいいんだけど、ここでは変数とworkspaceのとこ。

変数は「var.[variable.tfで設定した変数]」で見ることができる。0.11までは「”${}”」で囲まなきゃいけなかったぽくて、試してみたけど「そんな古い書き方してんじゃねえよ」って怒られる。すみませんでした。

workspaceごとの変数を参照する方法はlookupを使うとうまく行った。「lookup(var[変数名],”${terraform.workspace}”)」で上手に切り替わってくれる。僕の場合はproduction / stagingとかで切り替えたかったので、こういうやり方にした。

なんでworkspace増やしたかって、将来的に日本だとかアメリカだとか複数リージョンに跨がる設定が増えるかもしれない、という要件だったのでこの形にした。これなら新しい環境作るときはworkspace切って、variable.tfにworkspace名の変数増やせばいい。それもそれで面倒なときもあるかもしれないけど。

モジュール

terraformのモジュールは今自分がいる階層のmain.tfとかの最後に書く。

module〜module〜っていろんなところで言われているけど、みんなどうしてるんだろ、と思ってたけど、なんとなくふに落ちた。これを使いこなすとworkspaceいらなさそうだけど、そこまでうまくいけそうにないので、ここはプロダクトごとにわけるくらいにした。

ただmodule単位でvariable.tf書かなくてはならなくなったので、そうではない方法が多分あるんだろうけど一旦このままでいいや、という感じ。

実行と試験

これは今まで?と同じ。多分他にもあるんだろうけどあとで追記。

import

最初手作業でやっちまった、っていうのをimportしたりする。これはterraformの機能というより、サードパーティになる。

僕はterraformingを使った。

インストールはhomebrewでいけたし、割とたくさんのプラットフォームに対応しているのでいいかも。ただリソースによってはだしてくれないものもあって、その辺りはtfファイルに書いてあげなくてはいけない。僕の場合はCloudSQLとCloudrunは取り出せなかった。

まとめ

完璧に理解した。