Terraformのバージョン違い問題をDockerで解決する方法

このブログをご覧のみなさん、こんにちは。

Azure StorageでTerraformの状態管理ファイルterraform.tfstateを管理する方法によって、複数人やCI環境でTerraformの管理ができるようになります。
しかし、ここで一点注意事項があり、それは

  • 複数人やCI環境でTerraformの管理をする場合、Terraformのバージョンを統一する必要がある

ということです。

これはTerraformが作成するtfstatファイルに実行したTerraformのバージョン情報が含まれており、下位互換はするのですが、上位互換はしないためです。
どういう動作をするかというと、以下のようになります。

  • 0.7.0で実行したtfstatファイルを0.7.1で同期する: できる
  • 0.7.1で実行したtfstatファイルを0.7.0で同期する: できない

この辺りは意識していないと、「CI環境はバージョン固定で、ローカルのMacに最新を入れて実行したら、CI側がエラーになった」なんてことが起こる可能性があります。

そこで、ローカルにインストールしたバージョンに依存させず、ローカルとCI環境といった具合に環境が異なっていても、また、実行者が異なっていても同じTerraformのバージョンで運用出来るようになるととても幸せなのではないか?と思って解決策を考えました。

Environment

  • Mac Book Pro
    • OS X Yosemite 10.10.5
  • Terraform 0.7.1

Terraformのバージョン違い問題をDockerで解決する方法

タネを明かすと「なんだ、そんなことか」と思われるでしょうが、実行環境をDockerコンテナ上にすることが、この問題の解決策になります。
また、自分でTerraformのDocker Imageを準備しなくてもDocker HubにHashiCorp社の公式Terraformイメージが存在しています。

このイメージを使って、0.7.xで実行したいなら以下のコマンドになります。

$ docker run --rm --name terraform --env-file ${PWD}/.env -v ${PWD}:/terraform -w /terraform hashicorp/terraform:0.7.1 plan

バージョン固定にせず、常に最新版で実行したいなら以下のコマンドになります。

$ docker run --rm --name terraform --env-file ${PWD}/.env -v ${PWD}:/terraform -w /terraform hashicorp/terraform:latest plan

Terraformは更新頻度が高く、機能拡張されていくので、なるべく最新版で実行するように心がけた方が良いです。

Docker logo