uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

terraformプロバイダーとモジュールのバージョン制約に関するベストプラクティス

バージョン制約に関するベストプラクティス

Version Constraints - Configuration Language - Terraform by HashiCorp

terraformプロバイダーとモジュールのバージョン制約に関するベストプラクティスがここに記載があるのを知らなかったのでメモ代わりに意訳しておく。

まず、モジュールに関するバージョン制約について。

  • 3rdパーティーのモジュールについて、基本的にはバージョンは固定しておく。 必要なときにバージョンを上げるのが良い。
  • 自分たちのチーム・組織で管理しているモジュールについて、セマンティックバージョニングを採用しているかまたは不必要なアップデートを避けることが出来るリリースプロセスを採用しているならば特定の範囲でバージョンを指定するのが好ましい。

次に、プロバイダーのバージョン制約について。

  • 再利用するモジュールについてはそのモジュールが必要とする最小のterraformとプロバイダーのバージョンを指定する。 この制約は既知の非互換性を避けながら、モジュールのユーザーにモジュールを変更することなく新しいバージョンのterraformにアップグレードを許可する柔軟性を与える。
  • ルートモジュール(?)は依存するプロバイダーそれぞれにおいてプロバイダーのバージョンの上限と下限を指定するために~>を使うべきである。

~>の使い方は最初はなれないと難しいので詳しくは下記のドキュメントを読んで欲しいがドキュメントに挙げられている例を紹介すると ~> 1.0.41.0.5 から 1.0.99までは自動的にアップグレードするが 1.1.0 のようなマイナーバージョンが変わるバージョンアップはされないというような使い方が出来る。

Version Constraints - Configuration Language - Terraform by HashiCorp

まとめ

terraformを1年以上運用してきてこのバージョン管理のベストプラクティスを知らなかった結果、 最近非互換性のある3rdパーティーのモジュールのアップグレードにいくつか遭遇してモジュールのバージョンを固定する事になったので同じような事象に遭遇する前に動いているうちにバージョンを固定するのをオススメします。

Links