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

Terraformモジュール とは?

最終更新:
💡 インフラ構成の「関数」で再利用可能に

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モジュールのイメージ
ひよこ ひよこ
モジュールを使わないとどうなる?
ペンギン先生 ペンギン先生
例えば本番・ステージング・開発で同じネットワーク構成が必要なとき、モジュールがないと同じコードを3回コピーすることになるよね。変更があれば3か所を直す必要がある。モジュールにすれば1か所で定義して、環境ごとに変数を変えて呼び出せるんだ
ひよこ ひよこ
どうやって作るの?
ペンギン先生 ペンギン先生
ディレクトリを作って、main.tfにリソース、variables.tfに入力変数、outputs.tfに出力を書くのが推奨される最小構成だよ。呼び出す側はmoduleブロックのsourceにパスやレジストリのアドレスを書いて、変数を渡すんだ
ひよこ ひよこ
公開されているモジュールは使った方がいい?
ペンギン先生 ペンギン先生
Terraform Registryにはたくさんのモジュールが公開されていて、HashiCorpがレビューしたパートナーモジュールも探せるよ。便利だけど、どんなリソースが作られるかを理解してから使おうね。versionを指定して固定しておくと、作者の更新で急に挙動が変わるのを防げるよ
ひよこ ひよこ
とにかく細かくモジュールにすればいいの?
ペンギン先生 ペンギン先生
そうでもないよ。公式は、使いすぎると全体が理解しにくくなるから控えめに、と勧めているんだ。リソースを1つ包むだけの薄いモジュールは推奨されていなくて、「このサービス用のクラスター」のように、意味のあるまとまりで作るのがいいとされているよ
ひよこ ひよこ
モジュールが正しく動くか確かめる方法はある?
ペンギン先生 ペンギン先生
Terraform 1.6からterraform testという仕組みが使えるよ。.tftest.hclファイルにテストを書くと、テスト用の一時的なリソースで動作を確かめられるんだ。1.7からはプロバイダーの応答をモックする機能も加わっているよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Terraformモジュール」って出てきたら「インフラの設定を再利用できるようにまとめた部品」と思えればだいたいOK!
📖 おまけ:英語の意味
「Terraform Module」 = Terraformの部品
💬 Module(部品)としてインフラ構成を再利用できるようにする仕組みだよ。入力を受け取って結果を返す点で、プログラミングの関数に似ているんだ

参考資料

← 用語集にもどる