kakakakakku blog

Weekly Tech Blog: Keep on Learning!

tenv: Terraform のバージョン管理をしよう

普段 Terraform のバージョン管理ツールとして tfenv を使っている.機能面で困ることはないけど,tfenv の GitHub リポジトリを確認すると,直近数年は特にアップデートがなく,メンテナンスの観点で少し不安を感じていた💦

github.com

念のため tfenv の代替ツールを探しておこうと思って,tenv を試してみた❗️tenv は tfenv と同じように使えて,OpenTofu や Terragrunt もサポートしているという特徴がある.そして現在も活発に開発がされているようだった.tenv 以外だと tfswitch もあって少し試したけど,個人的には tenv が良さそうだった.

github.com

セットアップ

Homebrew で簡単にセットアップできる👌

$ brew install tenv

$ tenv version
tenv version 4.2.4

代表的なコマンドを試す

今回は Terraform サブコマンドを前提に試す❗️

tenv terraform list-remote コマンド

tenv terraform list-remote コマンドを使うとインストール可能な Terraform バージョンを確認できる.1.10 も 1.11 もある👌あと --stable オプションを付ければ alpha / beta / rc を除外できる.

$ tenv terraform list-remote | egrep ^1.10
1.10.0-alpha20240606
1.10.0-alpha20240619
1.10.0-alpha20240717
1.10.0-alpha20240730
1.10.0-alpha20240807
1.10.0-alpha20240814
1.10.0-alpha20240828
1.10.0-alpha20240911
1.10.0-alpha20240918
1.10.0-alpha20240926
1.10.0-alpha20241009
1.10.0-alpha20241023
1.10.0-beta1
1.10.0-rc1
1.10.0-rc2
1.10.0-rc3
1.10.0
1.10.1
1.10.2
1.10.3
1.10.4
1.10.5

$ tenv terraform list-remote --stable | egrep ^1.10
1.10.0
1.10.1
1.10.2
1.10.3
1.10.4
1.10.5

$ tenv terraform list-remote | egrep ^1.11
1.11.0-alpha20241106
1.11.0-alpha20241211
1.11.0-alpha20241218
1.11.0-alpha20250107
1.11.0-beta1
1.11.0-beta2
1.11.0-rc1
1.11.0-rc2

tenv terraform install コマンド

tenv terraform install コマンドを使うと指定した Terraform バージョンをインストールできる.バージョン指定を省略すると,ドキュメント(微妙に探しにくいけど README.md の Project binaries に書いてある)に載っている「バージョン解決順序」に沿って自動的に決まる💡

$ tenv terraform install 1.10.0
Installing Terraform 1.10.0
Fetching release information from https://releases.hashicorp.com/terraform/1.10.0/index.json
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_darwin_arm64.zip
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_SHA256SUMS
Downloading https://releases.hashicorp.com/terraform/1.10.0/terraform_1.10.0_SHA256SUMS.sig
Downloading https://www.hashicorp.com/.well-known/pgp-key.txt
Installation of Terraform 1.10.0 successful

tenv terraform install コマンドと .terraform-version

tfenv で使っていた .terraform-version は引き続き使える👌たとえば以下のような .terraform-version を用意しておく.

1.10.2

そしてバージョン指定を省略して tenv terraform install コマンドを実行すると,自動的に 1.10.2 になる.

$ tenv terraform install
Resolved version from /Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-tenv/.terraform-version : 1.10.2
Installing Terraform 1.10.2
Fetching release information from https://releases.hashicorp.com/terraform/1.10.2/index.json
Downloading https://releases.hashicorp.com/terraform/1.10.2/terraform_1.10.2_darwin_arm64.zip
Downloading https://releases.hashicorp.com/terraform/1.10.2/terraform_1.10.2_SHA256SUMS
Downloading https://releases.hashicorp.com/terraform/1.10.2/terraform_1.10.2_SHA256SUMS.sig
Downloading https://www.hashicorp.com/.well-known/pgp-key.txt
Installation of Terraform 1.10.2 successful

tenv terraform detect コマンド

tenv terraform detect コマンドを使うと現在のプロジェクトで使うべき Terraform バージョンを検出できる..terraform-version を用意したプロジェクトで実行すると 1.10.2 を検出できた.

$ tenv terraform detect
Resolved version from /Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-tenv/.terraform-version : 1.10.2
Terraform 1.10.2 will be run from this directory.

tenv terraform install コマンドと provider.tf

.terraform-versionlatest-allowed と書いておくと,自動的に provider.tf などに実装されている required_version を参照して指定された範囲から最新を解決する.たとえば以下のような provider.tf を用意しておく.

terraform {
 required_version = "~> 1.10.0"
}

そしてバージョン指定を省略して tenv terraform install コマンドを実行すると,自動的に 1.10.5(現時点の 1.10.x 最新)になる.

$ tenv terraform install
Resolved version from /Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-tenv/.terraform-version: latest-allowed
Scan project to find IAC files
Fetching all releases information from https://releases.hashicorp.com/terraform/index.json
Found compatible version remotely : 1.10.5
Installing Terraform 1.10.5
Fetching release information from https://releases.hashicorp.com/terraform/1.10.5/index.json
Downloading https://releases.hashicorp.com/terraform/1.10.5/terraform_1.10.5_darwin_arm64.zip
Downloading https://releases.hashicorp.com/terraform/1.10.5/terraform_1.10.5_SHA256SUMS
Downloading https://releases.hashicorp.com/terraform/1.10.5/terraform_1.10.5_SHA256SUMS.sig
Downloading https://www.hashicorp.com/.well-known/pgp-key.txt
Installation of Terraform 1.10.5 successful

tenv terraform list コマンド

tenv terraform list コマンドを使うとインストールした Terraform バージョンを一覧できる.今までの流れでインストールした3種類を確認できる👌

$ tenv terraform list
 1.10.0 (never used)
 1.10.2 (never used)
 1.10.5 (never used)

tenv terraform use

tenv terraform use コマンドを使うと指定した Terraform バージョンを切り替えられる.デフォルトだとホームディレクトリにある ~/.tenv/Terraform/version に書き込むため,--working-dir オプションを指定すれば .terraform-version を更新できる.

$ tenv terraform use 1.10.5 --working-dir
Written 1.10.5 in .terraform-version

まとめ

tfenv の代替ツールとして tenv を試してみた❗️同じように使えて,特にハマるところなく移行もできた.今後はまず個人プロジェクトから tenv を使っていこうかな〜と思う😀