aws terraform

tfenv で複数バージョンの Terraform を管理する (Linux/Mac)

tfenvを用いて複数バージョンの Terraform を管理してみます。

複数プロジェクトでバージョンの異なるTerraformを利用するときにとても便利です。
また後方互換性のないアップデートが来たときにすぐ切り戻せるように備えておいたほうが安心ですね。

スポンサーリンク

手順

tfenv インストール/アンインストール

Linux

githubより取得します。適当なディレクトリに配置できます。なお公式で記載されてるようにパスを通せば、どこでもだいじょぶです。

この例ではEC2で最初からパスが通っている、ユーザーのホームディレクトリ直下のbinに設置しています。アンインストールはディレクトリを削除してください。

$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
Cloning into '/home/ec2-user/.tfenv'...
remote: Enumerating objects: 21, done.
...
$ 
$ mkdir ~/bin ; ln -snf ~/.tfenv/bin/* ~/bin
$ ls -l bin/
合計 0
lrwxrwxrwx 1 ec2-user ec2-user 35 10月 31 13:11 terraform -> /home/ec2-user/.tfenv/bin/terraform
lrwxrwxrwx 1 ec2-user ec2-user 31 10月 31 13:11 tfenv -> /home/ec2-user/.tfenv/bin/tfenv
$ 

Mac

(上記githubに加えて)Homebrew でインストールできます。

注意点として、terraformが既にインストールされていると以下のようにエラーとなります。unlink してから再度インストールしましょう。

% 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 /usr/local. 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.
% 
% brew unlink terraform
Unlinking /usr/local/Cellar/terraform/0.13.3... 1 symlinks removed
% 
% brew install tfenv                     
...
% 

tfenv terraform操作

インストール可能バージョン一覧表示

インストール可能なバージョン一覧を表示します。

$ tfenv list-remote
0.14.0-beta2
0.14.0-beta1
0.14.0-alpha20201007
0.14.0-alpha20200923
0.14.0-alpha20200910
0.13.5
0.13.4
...
$

terraformインストール

バージョンを完全指定してインストールします。

$ tfenv install 0.13.5
Installing Terraform v0.13.5
...
$ 


引数なしだと、そのときの最新版がインストールされます。(ただし 後述する .terraform-versionに記載があればそのバージョン)

$ tfenv install
Terraform v0.13.5 is already installed
$


terraform の設定ファイルでバージョンを範囲指定している場合、min-required で最小バージョンがインストールされます。

$ cat main.tf 
...
terraform {
  required_version  = ">= 0.10.0, <0.12.3"
}
...

$ tfenv install min-required
Installing Terraform v0.10.0
...


注意点として、数値の最初のversionをインストールする挙動になります。必ず左側を小さいバージョンとしましょう。

$ cat main.tf 
terraform {
  required_version  = "<0.12.3,<0.10.0"
}

$ tfenv install min-required
Installing Terraform v0.12.3
Downloading release tarball from https://releases.hashicorp.com/terraform/0.12.3/terraform_0.12.3_linux_amd64.zip

$


前方一致でもバージョン指定できます。

$ tfenv install latest:^0.11
Installing Terraform v0.11.15-oci
...
$

インストール済みバージョン一覧表示

現在、ローカルにインストールされているバージョンを確認します。

$ tfenv list
  0.13.5
  0.12.3
  0.11.15-oci
* 0.10.1 (set by /home/ec2-user/hoge/.terraform-version)
  0.10.0
$ 
$ 
### 最初にuseで指定しないと以下のエラーとなる
$ tfenv list
cat: /home/ec2-user/.tfenv/version: No such file or directory
Version could not be resolved (set by /home/ec2-user/.tfenv/version or tfenv use <version>)
tfenv-version-name failed
$ 

バージョン切り替え

使用するバージョンを切り替えます。

$ tfenv use
Switching default version to v0.13.5
Switching completed
$ 
* 0.13.5 (set by /home/ec2-user/.tfenv/version)
  0.12.3
  0.11.15-oci
  0.10.0
$ 
$ tfenv use 0.12.3
Switching default version to v0.12.3
Switching completed
$
$ tfenv list
  0.13.5
* 0.12.3 (set by /home/ec2-user/.tfenv/version)
  0.11.15-oci
  0.10.1
$


なお .terraform-version を特定のディレクトリに置くことによって、そのディレクトリ配下のみ適用するバージョンを指定できます。
プロジェクトごとに切り替えられるため、 .terraform-version も terraformのコード群と一緒にgithubなどにコミットして管理していくのが良いと思います。

$ mkdir hoge
$ 
$ cd hoge/
$ 
$ echo 0.10.0 > .terraform-version
$ 
$ cat .terraform-version 
0.10.0
$
$ terraform --version
Terraform v0.10.0

Your version of Terraform is out of date! The latest version
is 0.13.5. You can update by downloading from www.terraform.io
$ 


ちなみにまだローカルにインストールされていないバージョンをterraform-version に記載するとterraform実行時に自動的に当該バージョンがインスト―ルされます。

$ echo 0.10.1 > .terraform-version
$ 
$ terraform --version
version '0.10.1' is not installed (set by /home/ec2-user/hoge/.terraform-version). Installing now as ...

$ 
$ tfenv list
  0.13.5
  0.12.3
  0.11.15-oci
* 0.10.1 (set by /home/ec2-user/hoge/.terraform-version)
  0.10.0
$ 

terraformアンインストール

$ tfenv uninstall   0.10.1
Uninstall Terraform v0.10.1
Terraform v0.10.1 is successfully uninstalled
$ 

tfenv アップデート

Linux

アップデートに関しては、githubのVersion相違により公式手順の -git-dir ではなく、-C オプション指定でないとできませんでした。(Git 1.8.5以降は-Cの模様)

$ git --version
git version 2.23.3
$ 
$ git -C ~/.tfenv pull
Already up to date.
$ 

Mac

% brew upgrade tfenv
Warning: tfenv 2.0.0 already installed
% 

参考

(*ゝω・)ノ ァリガトネー

tfenv
tfenvでTerraformのバージョン管理をする
Gitディレクトリ外からgitコマンドを実行する