🔖

Terraform のバージョン管理に tfenv を使う

2023/01/13に公開1

Terraform のバージョンを複数切り替えて検証したかったので、pyenv のようなものがないか探したところ、tfenv というものがあったので、試してみた。

tfenv:
https://github.com/tfutils/tfenv

Readme を読んでいく。なんと Applie Silicon も対応しているとの記載が!ありがたや...私が使用した PC は M2 Macbook Air (Apple Silicon) です。

Install

まずはインストールからだろう、と思って勢いよく試したところ、失敗した。

% brew install tfenv
()
Error: Cannot install tfenv because conflicting formulae are installed.
  terraform: because tfenv symlinks terraform binaries

Please `brew unlink terraform` before continuing.

Unlinking removes a formula's symlinks from /opt/homebrew. You can
link the formula again after the install finishes. You can --force this
install, but the build may fail or cause obscure side effects in the
resulting software.

既にインストールしている terraform を unlink してほしいということだった。

% brew unlink terraform
Unlinking /opt/homebrew/Cellar/terraform/1.3.7... 1 symlinks removed.

unlink したところで再度トライ。

% brew install tfenv
==> Fetching dependencies for tfenv: grep
==> Fetching grep
==> Downloading https://ghcr.io/v2/homebrew/core/grep/manifests/3.8_1
()
==> Running `brew cleanup tfenv`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

エラーが出ることなく完了したので、実際にコマンドが使用できることを確認する。

% tfenv
tfenv 3.0.0
Usage: tfenv <command> [<options>]

Commands:
   install       Install a specific version of Terraform
   use           Switch a version to use
   uninstall     Uninstall a specific version of Terraform
   list          List all installed versions
   list-remote   List all installable versions
   version-name  Print current version
   init          Update environment to use tfenv correctly.
   pin           Write the current active version to ./.terraform-version

How to use?

異なる Terraform のバージョンを入れる場合は、該当のバージョンを指定してインストールすれば良い。

% tfenv install 1.3.5 // v1.3.5 をインストールする
Installing Terraform v1.3.5
()
Installation of terraform v1.3.5 successful. To make this your default version, run 'tfenv use 1.3.5'
% terraform --version // ここではまだ切り替えていないので、もとのバージョンが表示される
Terraform v1.3.7
on darwin_arm64
+ provider registry.terraform.io/hashicorp/azurerm v3.34.0
% tfenv use 1.3.5 // バージョンを切り替える
Switching default version to v1.3.5
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.3.5

ここでバージョンを確認すると、指定したバージョン(v1.3.7 -> v1.3.5)に切り替わったことが確認できる。

% terraform --version
Terraform v1.3.5
on darwin_arm64
+ provider registry.terraform.io/hashicorp/azurerm v3.34.0

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

Other Command

1. ローカルでインストールされているバージョンを知りたい

ローカル PC でインストールされている Terraform のバージョンを確認したい場合は、以下のコマンドを使用する。

% tfenv list
  1.3.7
* 1.3.5 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)

上記の場合だと、2つバージョンが存在しており、現状指定されているものが * がついている v1.3.5 が現在使用されるバージョンであることがわかる。

2. インストール可能なバージョンを知りたい

list は、ローカルでインストールされているバージョンだったが、remote をつけることにより、インストールが可能なバージョンを確認することができる。

% tfenv list-remote
1.4.0-alpha20221207
1.4.0-alpha20221109
1.3.7
1.3.6
1.3.5
1.3.4
()

3. ローカルでインストールされているバージョンをアンインストールしたい

もう不要だったりして、使っていたバージョンをアンインストールしたい場合は、以下のコマンドを使用する。

% tfenv uninstall 1.3.5
Uninstall Terraform v1.3.5
Terraform v1.3.5 is successfully uninstalled

current version を指定してアンインストールした場合、どのような動きになるのかが少し気になったので、試してみた。

% tfenv list
  1.3.7
* 1.3.5 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)
% tfenv uninstall 1.3.5
Uninstall Terraform v1.3.5
Terraform v1.3.5 is successfully uninstalled
% tfenv list
  1.3.7
No default set. Set with 'tfenv use <version>'

エラーが出るかと思ったが、アンインストールされた。ただ、* (current version を表す) は表示されないので、現在の Terraform のバージョンがどうなったのかと確認のコマンドをたたくと、以下のようになった。

% terraform --version
version '1.3.5' is not installed (set by /opt/homebrew/Cellar/tfenv/3.0.0/version). Installing now as TFENV_AUTO_INSTALL==true
Installing Terraform v1.3.5
Downloading release tarball from https://releases.hashicorp.com/terraform/1.3.5/terraform_1.3.5_darwin_arm64.zip
################################################################################################################################################################# 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.3.5/terraform_1.3.5_SHA256SUMS
Not instructed to use Local PGP (/opt/homebrew/Cellar/tfenv/3.0.0/use-{gpgv,gnupg}) & No keybase install found, skipping 
()
Installation of terraform v1.3.5 successful. To make this your default version, run 'tfenv use 1.3.5'
Terraform v1.3.5
on darwin_arm64
+ provider registry.terraform.io/hashicorp/azurerm v3.34.0

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

どうやら、/opt/homebrew/Cellar/tfenv/3.0.0/version を見に行ってバージョンを探しているような動きをしている。記載を確認すると以下のようになっていた。

% cat /opt/homebrew/Cellar/tfenv/3.0.0/version
1.3.5

現状を確認すると、なるほど v1.3.5 となっている。

% terraform --version
Terraform v1.3.5
on darwin_arm64
+ provider registry.terraform.io/hashicorp/azurerm v3.34.0

Your version of Terraform is out of date! The latest version
% tfenv list
  1.3.7
* 1.3.5 (set by /opt/homebrew/Cellar/tfenv/3.0.0/version)

おわりに

🎉 tfenv を使用すると、複数のバージョンをインストールし、簡単に切り替わることがわかった。
🎉 Terraform は実行時のバージョンの指定はできるものの、"xx 以上" のような書き方をするので、古いバージョンで動作が必要になった時に便利。

GitHubで編集を提案

Discussion

JboyHashimotoJboyHashimoto

とても使いやすいバージョン管理ツールでした。
TerraformをCloud9でasdfしか使ったことないのでとても参考になりました。