tfenvとは

tfenv は rbenvやpyenvのようにTerraformのバージョンを切り替えられるツール。

好きなバージョンをインストールして切り替えたり、.terraform-versionファイルを配置して 指定フォルダ以下のTerraformのバージョンを固定したりできる。

インストール

Macの場合はHomebrewでインストールできる。

$ brew install tfenv

使い方

インストール可能なバージョンの確認

インストール可能なバージョンはtfenv list-remoteコマンドで確認できる。

$ tfenv list-remote
1.7.0-alpha20231130
1.7.0-alpha20231108
1.7.0-alpha20231025
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
...

terraformのインストール

tfenv installコマンドでインストールできる。

$ tfenv install 1.6.5
##############################
...
Installation of terraform v1.6.5 successful. To make this your default version, run 'tfenv use 1.6.5'

terraformのバージョンを切り替える

tfenv useコマンドで切り替えられる。

$ tfenv use 1.6.5
Switching default version to v1.6.5
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.6.5

インストール済みのバージョンの確認

terraform listコマンドでインストール済みのバージョンとデフォルトのバージョンを確認できる。

$ tfenv list
* 1.6.5 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)
  1.3.7
  1.2.8

インストール済みのバージョンの一覧を表示している。*が付いているのがterraform useで指定したデフォルトのバージョン。

後述の.terraform-versionファイルを作成するとそのディレクトリ以下ではそのバージョンのTerraformが使われるようになる。

$ cat .terraform-version
1.3.7

$ tfenv list
  1.6.5
* 1.3.7 (set by /Users/sue/work/blog/suer-til-blog.atsum.in-infra/.terraform-version)
  1.2.8

デフォルトのバージョンの確認

現在利用しているバージョンはterraform versionコマンドで確認できる。

$ tfenv version-name
1.6.5

terraformのアンインストール

tfenv uninstallコマンドでアンインストールできる。

$ tfenv uninstall 1.6.5

ディレクトリ以下でTerraformのバージョンを固定する

.terraform-version

.terraform-versionファイルを設置し、内容としてバージョン番号を書くとそのディレクトリ以下ではそのバージョンのTerraformを使うようになる。

$ cat .terraform-version
1.3.7

$ terraform version-name
$ terraform --version                                                                                                                       00:09:56
Terraform v1.3.7
on darwin_arm64

Your version of Terraform is out of date! The latest version
is 1.6.5. You can update by downloading from https://www.terraform.io/downloads.html

コマンドで.terraform-versionを作成する

tfenv pinコマンドで.terraform-versionファイルを作成できる。

$ tfenv pin
Pinned version by writing "1.6.5" to /Users/sue/work/blog/suer-til-blog.atsum.in-infra/.terraform-version

$ cat .terraform-version
1.6.5

.terraform-versionを更新すると必要なバージョンのTerraformを自動でインストールする

.terraform-versionを編集すると次のTerraformコマンドの実行からそのバージョンのTerraformが実行される。
このとき指定したバージョンのTerraformがインストールされていない場合は自動でインストールされる。

$ cat .terraform-version
1.7.0-alpha20231130

$ terraform plan
version '1.7.0-alpha20231130' is not installed (set by .../.terraform-version). Installing now as TFENV_AUTO_INSTALL==true
Installing Terraform v1.7.0-alpha20231130
Downloading release tarball from https://releases.hashicorp.com/terraform/1.7.0-alpha20231130/terraform_1.7.0-alpha20231130_darwin_arm64.zip
################################################################################################################################################################################################# 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.7.0-alpha20231130/terraform_1.7.0-alpha20231130_SHA256SUMS
Not instructed to use Local PGP (/opt/homebrew/Cellar/tfenv/3.0.0/use-{gpgv,gnupg}) & No keybase install found, skipping OpenPGP signature verification
Archive:  /var/folders/cg/fbt676qs6c52jd7md724ln7w0000gn/T/tfenv_download.XXXXXX.toFLjPI5Hb/terraform_1.7.0-alpha20231130_darwin_arm64.zip
  inflating: /opt/homebrew/Cellar/tfenv/3.0.0/versions/1.7.0-alpha20231130/terraform
Installation of terraform v1.7.0-alpha20231130 successful. To make this your default version, run 'tfenv use 1.7.0-alpha20231130'
...

Terraformのコードをチームで共有している場合、.terraform-versionファイルを含めておけばチームメンバーの環境でも自動でインストールされる。