Terraformでのバージョン管理方法

Terraformをバージョン管理する方法について備忘録。

環境

tfenvの利用

tfenv とは、rbenvやpyenvみたいな、実行されるTerraform自体のバージョン管理をしてくれるモジュールです。

作者の方のQiita投稿。

tfenvでTerraformのバージョン管理をする

似たものに tfswitch というものがあるようですが、日本語記事の多さから、今回は tfenv を利用しています。

tfswitch

GitHubにあるReadMeを参考に、利用方法を確認します。

tfenv

tfenvのインストール

git cloneしてきて、シンボリックリンクを貼るだけ。

$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
$ sudo ln -s ~/.tfenv/bin/* /usr/local/bin
$ tfenv --version
tfenv 2.0.0-beta1

Terraformのインストール

tfenv管理下で、Terraformをインストールします。

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

$ tfenv list-remote
0.12.23
0.12.22
0.12.21
0.12.20
0.12.19
...

インストール。

$ tfenv install 0.12.23
$ tfenv install 0.11.14

利用Terraformバージョンのスイッチ

利用するTerraformバージョンを変更する方法を確認します。

インストール済、現在利用バージョンの確認。

$ tfenv list
  0.12.23
* 0.11.14 (set by /home/zunda/.tfenv/version)

バージョンのスイッチ。

$ tfenv use 0.12.23
Switching default version to v0.12.23
Switching completed
$ terraform --version
Terraform v0.12.23

テンプレートファイル側での制限

Terraformのテンプレートファイル側でも、利用するTerraformバージョンを規定できる記述があるので、その点を確認します。

Terraformバージョンを規定する required_version と、利用するproviderを規定する required_providers があるようです。

The required_version setting can be used to constrain which versions of the Terraform CLI can be used with your configuration. If the running version of Terraform doesn't match the constraints specified, Terraform will produce an error and exit without taking any further actions.

Specifying a Required Terraform Version

The required_providers setting is a map specifying a version constraint for each provider required by your configuration.

Specifying Required Provider Versions

サンプル。詳しい記述方法は、上記公式サイトのリンクより。

sample.tf

terraform {
  required_version = ">= 0.11.0, <= 0.12.0"

  required_providers {
    aws = ">= 2.52.0"
  }

}

0.12.xのTerraformで実行すると、Unsupportと怒られます。

$ terraform plan

Error: Unsupported Terraform Core version

  on sample.tf line 2, in terraform:
   2:   required_version = ">= 0.11.0, <= 0.12.0"

This configuration does not support Terraform version 0.12.23. To proceed,
either choose another supported Terraform version or update this version
constraint. Version constraints are normally set for good reason, so updating
the constraint may lead to other errors or unexpected behavior.