「fmt を実行しようとしたらバージョンが異なっていてエラーになった」
「古いバージョンが使われていて、定義されている構文が対応してないよ・・・」
Terraform を使っていて、バージョン違いによってエラーが出たことはないでしょうか。
例えば v0.11.x でエラーが出るなら v0.12.x にしたらいいのでは?っと思うかもしれませんが、Terraform は気軽にバージョンアップできないのも事実。
特に数年経過したようなプロジェクトに携わっている場合、利用している Terraform のバージョンが古いままというケースも珍しくありません。
今回は、ローカル環境で簡単に Terraform のバージョンを切り替える方法を紹介します。
tfenvとは
どのモジュールにおいても、複数バージョンを使い分けたいという需要は多く、例えば Java(JDK)や NodeJS、Python でも簡単に切り替えるライブラリが用意されていたりします。
Terraform も同じく、tfenv というモジュールが用意されていて、複数バージョンを気軽に切り替えることができるのです。
最新バージョンは 2020 年 4 月にリリースされた 2.0.0 になります。
(2021 年 1 月時点)
tfenvのインストール
では早速、Mac のターミナルで実行してみましょう。今回は楽して brew でインストールしちゃいます。
1 | $ brew install tfenv |
バージョンを確認してみます。最新バージョンですね。
1 2 3 | $ tfenv --version tfenv 2.0.0 |
Terraformのインストール
では、tfenv を使って Terraform の 0.11.7 をインストールしてみます。
今回は手元の環境のバージョンに合わせたかったので 0.11.7 としましたが、このバージョンにこだわる必要はありません。
1 | $ tfenv install 0.11.7 |
インストールされている一覧を確認してみるとエラーが・・・。
1 2 3 4 5 | $ tfenv list cat: /usr/local/Cellar/tfenv/2.0.0/version: No such file or directory Version could not be resolved (set by /usr/local/Cellar/tfenv/2.0.0/version or tfenv use <version>) tfenv-version-name failed |
デフォルトで利用するバージョンが指定されていないからエラーが出たようですね。
エラーメッセージの最後に tfenv use しろと書かれています。
1 | $ tfenv use 0.11.7 |
一覧に出てきました。
1 2 3 | $ tfenv list * 0.11.7 (set by /usr/local/Cellar/tfenv/2.0.0/version) |
では、次に 0.12.14 も入れてみましょう。
1 | $ tfenv install 0.12.14 |
Terraformのバージョン切り替え
一覧に 0.12.14 が増えているハズなので早速確認してみましょう。
1 2 3 4 | $ tfenv list 0.12.14 * 0.11.7 (set by /usr/local/Cellar/tfenv/2.0.0/version) |
利用するバージョンを 0.12.14 に切り替えてみます。
1 | $ tfenv use 0.12.14 |
一覧を確認すると、0.12.14 が対象に切り替わっていますね。
1 2 3 4 | $ tfenv list * 0.12.14 (set by /usr/local/Cellar/tfenv/2.0.0/version) 0.11.7 |
もちろん terraform コマンドでバージョン確認しても想定通りです。
1 2 3 | $ terraform --version Terraform v0.12.14 |
0.11.7 に戻してバージョン確認してみます。
1 2 3 4 5 | $ tfenv use 0.11.7 $ terraform --version Terraform v0.11.7 |
バージョンの切り替えを自動化
いちいち tfenv use でバージョン指定するのも面倒ですよね。
そんな場合は、該当のディレクトリに .terraform-version というファイルを作成しておけば自動的に指定バージョンに切り替えてくれます。
1 2 3 | $ vi .terraform-version 0.11.7 |
チームで開発している場合は、他の人のためにもリポジトリにコミットしておくといいでしょう。
リビジョン(ビルド)がチームメンバーによって異なるかもしれないので、指定したマイナーバージョンの最新を使うようにしておいてもいいかもしれませんね。
1 2 3 | $ vi .terraform-version latest:^0.11 |
詳しくは公式のヘルプを確認してみてください。
まとめ
tfenv を使って、ローカルで複数の Terraform バージョンを扱えるようにしました。
Terraform 自体は 2021 年 1 月時点で、0.14.4 が最新バージョンとなっています。
今回紹介した 0.11.x や 0.12.x も既に古くなっていますが、インフラ環境を支える重要なツールになるので、バージョンアップは慎重に行いたいですね。