📌
terraform のバージョンマネージャー選び
tl;dr
- tfenv を長いこと使っていたけど、最近更新されていないことに気がついた
- 乗り換えるなら何にするか検討してみた
version manager
- cli などのツールのバージョン管理は大事
- チームや組織で共通のバージョンを使うのは運用上必須
- 特定のバージョンへの変更、固定、最新化が容易であることが望ましい
- 現在進行系で継続的な更新が行われていてほしい
terraform のバージョンマネージャー
- terraform に限って言えば、tfenv で今後もそんなには困らない
- OpenTofu の件があるので、両方に対応できるといいかもしれない
- CVEなどもあるので、継続的な更新は期待したい(お前がコントリビュートするんだよ)
tfenv
- tfutils/tfenv: Terraform version manager
- かなり初期の頃からある
- rbenv にインスパイアされている(と書いてある)
- .terraform-version
- Release v3.0.0 - Major Update · tfutils/tfenv 最新版から2年以上が経過
- ほぼ完成しているツールとはいえ、メンテナンスに不安があるツールを使い続けるのもどうか
- というわけで別のツールを探す旅に出たってワケ
tofuenv
- tofuutils/tofuenv: OpenTofu version manager
- terraform の OSS fork である OpenTofu のバージョンマネージャー
- terraform と OpenTofu の両方が使える tenv ができたのでお役御免になったようだ?(アーカイブはされていない)
- terraform には対応していないので却下
tenv
- tofuutils/tenv: OpenTofu / Terraform / Terragrunt and Atmos version manager
- terraform, OpenTofu, Terragrunt などが扱える
- 後発組のため、他のツールとの互換性も高い(.terraform-versionが使える)
- 更新頻度も高め?
tfswitch
- warrensbox/terraform-switcher: A command line tool to switch between different versions of terraform (install with homebrew and more)
- 古参のツール
- terraform block を含む .tf ファイルを自動で読み込んでくれるので、きっちりバージョン管理をしているコードの場合に有利
- OpenTofu にも対応
tfvm
- cbuschka/tfvm: Terraform Version Manager - Always the right terraform version for your project
- 今回の中では一番規模が小さい
- Similar tools に同様のツールがリストされている
- 他もそうだけど、個人レベルのツールでは terraform と OpenTofu に対応するのは大変かと(tfvm は OpenTofu 対応をしていない)
他に
- Repository search results
- 規模の小さいのは結構ある
- terragrunt 向けのやつとか
- asdf のプラグインとか
- 結局のところ継続した更新を期待しているので
結局のところ
- 急いで変更する必要はない(はず)
- 変更の機会があったら tenv または tfswitch が有力候補
- どちらも
.terraform-version
が使えるので移行には困らないはず - 後発でこれらを超えるツールを出して継続メンテナンスするのはモチベーションが保てない気がするし難しいよね
- 他にこれだってツールがあれば教えてください
Discussion
よろしければ aqua もどうぞ (ただし .terraform-version には現状未対応)
あざます。
aqua 自体は便利に使わせてもらってるんですけど、terraform の管理って点では実務に向いていない(と判断している)ので除外しています。
ここで @sogaoh も書いていますが、複数の仕事をしていると terraform のバージョンが複数要るケースがあります。というか絶対要ります。
A社のBシステムでは v1.7 、Cシステムでは未だにv1.2、D社ではv1.9.6を使う必要があって、というように、ディレクトリ毎に使用するバージョンを変える必要がある場合がほとんどです。
HCP Terraform を remote で使っているとローカルのバージョンは関係なくなるんですけど、それ以外では多くの場合に .terraform-version がないと辛いことになります。
また、モジュール開発をしているとか、バグを踏んだかもしれないなどのケースでもバージョンを切り替えて使用する必要があります。
ひどい場合は同一の社内でリポジトリ毎に使用バージョンが異なりロクに管理されていない、みたいなこともざらにあります。
一箇所でしか使わない、モジュール開発等もしない、terraform をインストールしてみた、使ってみた、って言いたいだけとか、インストール方法の1つとしてだけなら aqua を紹介するでもいいんですけど、.terraform-version を使えるツールがあるのにあえて aqua を Terraform のバージョンマネージャーとして紹介するのは違うなと。
python等の言語環境のバージョンを管理するのに aqua は使わないけど、そのためのツールである rye,uv,voltaなどは aqua を使う、terraform は前者に近いもの、ということです。
aqua で普通にできますね。
aqua で普通に切り替えられますね。
良くわからない、というか aqua というツールを誤解しているように思えるんですけど、
Homebrew のようなツールでそれを言うなら理解できますが、 aqua は CLI Version Manager です。
ディレクトリごとに設定ファイルによって異なるバージョンを使えますし、設定ファイルにかかれているバージョンを変えればバージョンの変更も行えますし、設定ファイルのバージョンを変えるコマンドもあります。
最終的に aqua を使わずに他のツールを使うのは全然いいと思いますが、 aqua のことを誤解しているように思えるのでそこは訂正しておきたいです。
あざます。思い出しました。
ディレクトリに aqua.yaml 置いたら確かにできますね。
業務採用していないのでリポジトリに置かないからすっかり抜けてました。。。
ぶっちゃけ使いにくい brew の代替として aqua を使わせてもらっているので、各ディレクトリに配置するという使い方をしてなくて。。。
ありがとうございます。 aqua のことをより知ってもらえて何よりです。
ついでに以下補足:
aqua は OpenTofu もサポートしています。
行われていると言っていいと思います。
tfenv からの移行で .terraform-version をそのまま使いたいのであれば確かに aqua よりほかのツールのほうが向いているとは思います。
(.terraform-version 対応は頭の片隅にはあるんですが、考えないといけないこともあってどうしようとかなぁという感じです。)
.terraform-version から aqua.yaml を生成する簡単なスクリプトを書いてみました。
これを実行すると .terraform-version と同じディレクトリに同じ terraform のバージョンを指定した aqua.yaml が生成されるはずです。
あぁ、あと Terragrunt のような関連ツールにも対応しています。
単に使いこなし方がわかってなかっただけですね(お恥ずかしい
ちゃんと知ってはいたんですよ。ディレクトリ毎に入れられるのも。。。
業務用リポジトリに入れるにはチーム展開しないといけないし、git 管理から避けるのも管理的におかしな話だし、brew代替のつもりだったしグローバルで使えばいっかってなってそれっきりだっただけで。。。w