Quipper provides some products that consist of different infrastructures (AWS VPCs) and we use Terraform to build them.

Also, our team manages Terraform files (.tf and .tfvars) for a product as a GitHub repository such as quipper/product1-terraform and each repository uses different versions of Terraform. For example, one product uses 0.6.16 but another uses 0.7.3.

In this situation, we have to be careful to run terraform commands with the correct version because a .tfstate file generated by an incorrect version might not be compatible, especially between version 0.6 and 0.7.

In order to prevent such an incident, we use tfenv, which is an open source version manager of Terraform.

Installing tfenv

It’s really easy! We just check out the repository and add tfenv/bin to our PATH.

$ git clone https://github.com/kamatama41/tfenv.git ~/.tfenv
$ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile

tfenv install

We can install a specific version of Terraform with tfenv install <version>

$ tfenv install 0.7.3

.terraform-version

It’s a feature similar to .ruby-version of rbenv. tfenv detects .terraform-version on our repository root and uses the version in the file preferentially. So we can use only one version by putting the file into each repository.

$ cat .terraform-version
0.6.16

$ terraform --version
Terraform v0.6.16

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

$ echo 0.7.3 > .terraform-version

$ terraform --version
Terraform v0.7.3

Summary

tfenv makes us happy when we use Terraform with multiple users or on multiple environments.