【てらふぉーむもじゅーる】

Terraformモジュール とは?

💡 インフラ構成の「関数」で再利用可能に
📌 このページのポイント
Terraformモジュール — 再利用可能な構成単位 ルートモジュール (main.tf) エントリポイント・子モジュールを呼び出す module module module VPCモジュール variables: cidr_block outputs: vpc_id ネットワーク構成 EC2モジュール variables: type, ami outputs: instance_id サーバー構成 RDSモジュール variables: engine, size outputs: endpoint データベース構成 ✓ 再利用可能 ✓ 変数で環境切替 ✓ チームで共有 dev / staging / prod で同じモジュールを使い回せる インフラ構成を部品化して再利用・管理しやすくする仕組み
Terraformモジュールのイメージ
ひよこ ひよこ

モジュールを使わないとどうなる?

ペンギン先生 ペンギン先生

例えば本番・ステージング・開発で同じVPC構成が必要な場合、モジュールなしだと3回同じコードをコピペすることになる。変更があれば3箇所を修正。モジュールを使えば1箇所定義して3回呼び出すだけ。プログラミングDRY原則と同じ考え方だよ

ひよこ ひよこ

おもしろい!どうやって作るの?

ペンギン先生 ペンギン先生

ディレクトリを作成して.tfファイルを配置、②variables.tfで入力パラメータを定義、③main.tfでリソースを記述、④outputs.tfで外部に公開する値を定義。呼び出し側ではmoduleブロックでsource(パス or レジストリURL)と変数を指定する。ローカルパス、Git URLTerraform Registry URLをソースに指定できるよ

ひよこ ひよこ

公式モジュールは使った方がいい?

ペンギン先生 ペンギン先生

Terraform RegistryのVerifiedモジュール(HashiCorp検証済み)は品質が高くて便利。AWS VPCやEKSなどの公式モジュールは、ベストプラクティスに沿った構成を簡単に作れる。ただしブラックボックスにならないよう中身を理解した上で使おう。カスタマイズが多い場合は自作モジュールの方が管理しやすいよ

ひよこ ひよこ

モジュール設計のベストプラクティスは?

ペンギン先生 ペンギン先生

モジュールは1つの論理的な単位(VPC、EKSクラスタなど)にする、②必要以上に抽象化しない(条件分岐が多すぎるモジュールは使いにくい)、③バージョニングで破壊的変更を管理、④READMEとexamplesディレクトリを用意、⑤terraform-docs でドキュメント自動生成。テストにはterratestを使うのがおすすめだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Terraformモジュール」って出てきたら「インフラ設定を再利用可能にまとめたパッケージ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Terraform Module」 = Terraformの部品
💬 Module(部品)としてインフラ構成を再利用可能にする。プログラミングの関数に近いよ
← 用語集にもどる