Terraformバージョンを固定する - Terraformのきほんと応用

2022/01/25に公開

Terraformを使う全ての人が実践すべき内容について説明します。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。

Teraformのてっぱん

開発に使うTerraformとproviderのバージョンを制限する。ただしバグフィックスなどのパッチバージョンは更新する。

main.tf
terraform {
  required_version = "~> 1.1.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.73.0"
    }
  }
}

説明

バージョン形式

Terraformのバージョン形式に関するドキュメントは見当たらないのですが、providerの開発ガイドではセマンティックバージョニングという一般的な考え方を推奨しているため、Terraform本体も同様と考えられます。

セマンティックバージョニングでは、バージョンをX.Y.Zの形式で表します。Xはメジャーバージョン、Yはマイナーバージョン、Zはパッチバージョンを表します。ソースの修正が必要となる可能性がある場合には、メジャーバージョンやマイナーバージョンが上がります。

バージョンを制限する理由

Terraformソースを複数人で開発している場合、使用しているバージョンが異なると問題になることがあります。たとえば、古いバージョン(0.12未満)で作成したソースを最近のバージョン(0.12以上)で実行するとエラーとなってしまいます。このため、ソースに対応したバージョンで動くように制限を入れることで問題に対応します。
ただし、バグ修正などソース変更を伴わないアップデートには追随すべきです。メジャーバージョンとマイナーバージョンは慎重にアップデートしたいけど、パッチバージョンは自由にあげたい。これが、Terraformでの開発の考え方の基本です。

バージョン番号を固定する方法

Terraform本体のバージョンを制限する場合はterraformセクションのrequired_versionを使用します。providerのバージョン制限はrequired_providersを使用します。
バージョンの指定方法はいくつかありますが「~>」という演算子を使うことでメジャーバージョンとマイナーバージョンがあっていない場合はエラーとすることができます。
以下はTerraform本体のバージョンを1.0.Xに、AWSProviderのバージョンを3.73.Xに制限する場合の例です。

main.tf
terraform {
  required_version = "~> 1.0.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.73.0"
    }
  }
}

この定義がある状態で不当なバージョンのTerraformを実行すると以下のようなエラーとなり実行できなくなります。
version error exsample

次はこれをやろう

Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。

GitHubで編集を提案

Discussion