Terraformのbackendを使いこなしたい

Terraformのworkspaceが結構わかってきたので、次はbackendを使いこなしたい。ということで、こちらもいろいろ動きを確認した。Terraformのバージョンは0.10.4。

単純にバックエンドを設定して使う

標準ではローカルにterraform.tfstateが生成されてそれを使うのだけど、S3のような場所に保存したいという場合がある。その時に使うのがバックエンド。backend.tfのようなファイルに定義を書くことで指定できる。

実際に有効にするには、terraform initコマンドを使う。ここではbucketやcredentialのパスをオプションで指定しているが、backend.tfに書いてもよい。

これを実行した後はS3上のrtak.tfstateが更新される。

workspaceを使う場合のバックエンドについて

stagingとproductionのように、workspaceを複数使う場合にバックエンドがどうなるのかを確認する。結論としては、tfstateのパスにworkspace名が含まれるようになり、別々に管理される。

これでapplyすると、env:/${workspace_name}/rtak.tfstateというファイルが追加される。

workspaceにproductionを追加すると以下のように、production用のディレクトリが追加されていることがわかる。

開発時にはlocal backendを使いたい

同じバックエンドでworkspaceによってtfstateが変わるということはわかった。しかし、開発時にゴリゴリ触るような場合、「r_takaishi-dev」 のような、個人用のworkspaceを用意して検証したいことがある。このとき、productionやstagingの場合はS3バックエンドを使い、それ以外ではlocal backendを使えると便利そうだ。そういうことが現時点でできるかどうか調べたが、どうやらできないようだった。需要があるかわからないが、Terraformに機能追加する形で実現したいか調べていきたい。

というところで終わってもつまらないので、若干ハック的になるが一時的にlocal backendを使うテクニックを記載しておく。

まず、backend.tfを編集し、backendをs3からlocalに変更する。

そして、terraform initを以下のように実行する。

backendがlocalになっていることがわかるだろうか。これでplanやapplyを実行すると、S3上のtfstateではなくローカルを見るようになる。使い終わったらdestroyすれば綺麗になるし、S3に不要なファイルも置かれない。

実際にこれをやるのはミスの元になりそうなので、workspace毎にbackendを切り替えられるようになるまではS3 backendを使う方がいい気はする。