Terraform のバージョン管理に tfenv を使う
Terraform のバージョンを複数切り替えて検証したかったので、pyenv のようなものがないか探したところ、tfenv
というものがあったので、試してみた。
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 以上" のような書き方をするので、古いバージョンで動作が必要になった時に便利。
Discussion
とても使いやすいバージョン管理ツールでした。
TerraformをCloud9でasdfしか使ったことないのでとても参考になりました。