TL;DR
Terraform がまとめて管理するリソースの集まり。再利用できるモジュールを使うと、インフラの構築を標準化し、同じ構成を繰り返し作れる。
仕組み
公式ドキュメントによると、ワークスペースのルートディレクトリにある設定ファイルはルートモジュールと呼ばれる。module ブロックで呼び出すモジュールは子モジュールと呼ばれる。ルートモジュールは子モジュールを何度でも呼び出せ、子モジュールもさらに子モジュールを呼び出せる。
モジュールはローカルのファイルシステム、レジストリ、VCS のリポジトリから読み込める。公開されたモジュールは Terraform Registry にあり、source と version を指定すると自動でダウンロードされる。モジュールの値は入力変数で受け取り、出力値で外に公開する。呼び出し側は module.<label>.<output> の形で出力値を参照する。
例
module "consul" {
source = "hashicorp/consul/aws"
version = "0.1.0"
}