Terraformをバージョン管理する方法について備忘録。
環境
tfenvの利用
tfenv
とは、rbenvやpyenvみたいな、実行されるTerraform自体のバージョン管理をしてくれるモジュールです。
作者の方のQiita投稿。
似たものに tfswitch
というものがあるようですが、日本語記事の多さから、今回は tfenv
を利用しています。
GitHubにあるReadMeを参考に、利用方法を確認します。
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.