Terraformバージョンを固定する - Terraformのきほんと応用
Terraformを使う全ての人が実践すべき内容について説明します。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
Teraformのてっぱん
開発に使うTerraformとproviderのバージョンを制限する。ただしバグフィックスなどのパッチバージョンは更新する。
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に制限する場合の例です。
terraform {
required_version = "~> 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.73.0"
}
}
}
この定義がある状態で不当なバージョンのTerraformを実行すると以下のようなエラーとなり実行できなくなります。
次はこれをやろう
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
Discussion