Terraform Moduleの紹介
🚀 Terraform Module入門:インフラコードを整理し、再利用性を高める
ここの記事は、これからTerraformを始める方が、コードの効率と品質を格段に向上させる**Module(モジュール)**の基本を学ぶための入門編です。
📦 Moduleとはなにか?(基本とメリット)
一言でいうと、Moduleとは、Terraformのコードをまとめた再利用可能なパッケージのことです。
あなたがインフラをコード化する際、「Webサーバー(EC2)とネットワーク(VPC)をセットで作りたい」という一連の構成を一つの塊として定義したものがModuleです。
1. コードの再利用性(DRY原則の実現)
Moduleの最大のメリットは、コードの再利用性を高め、**DRY(Don't Repeat Yourself:繰り返しを避けよ)**の原則を実現することです。
【例】3つの環境に同じ構成が必要な場合
| 状況 | コード管理 | メンテナンス |
|---|---|---|
| Moduleを使わない場合 | 同じコードを3つのファイルにコピー&ペースト | 修正が必要なとき3箇所直す必要あり |
| Moduleを使う場合 | 一度だけ定義したModuleを3回呼び出す | 修正が必要なとき1箇所直すだけで完了 |
これにより、コード量が大幅に減り、メンテナンスの効率が飛躍的に向上します。
2. コードの構造化と可読性の向上
Moduleは、コードを機能ごと(例:network、database、app_serverなど)に分割・整理し、ディレクトリ構造で管理できるようにします。これにより、プロジェクトの構成が一目で分かりやすくなり、チーム開発や引き継ぎが圧倒的にスムーズになります。
🔑 Moduleの使い方:インプットとアウトプットの役割
Moduleを再利用可能な部品として使うために重要なのが、インプット(変数)とアウトプット(出力)の考え方です。この仕組みが、Moduleによる抽象化を実現します。
1. インプット(variable)による抽象化
Moduleは、インプットを事前に定義することで、必要最小限のパラメータだけで必要なインフラリソースを構築できるように設計されます。
たとえば、高性能なVPC Moduleの内部には何十行もの設定コードがあるかもしれません。しかし、Moduleの利用者は以下のコードのように、VPCのCIDRブロックと環境名など、必要な情報だけをインプットとして渡すだけで済みます。
# Moduleを呼び出す側のコード例 (Root Module)
module "production_vpc" {
# どこにあるModuleを使うかを source で指定
source = "terraform-aws-modules/vpc/aws"
# Moduleが要求するインプットに値を設定
vpc_cidr_block = "10.10.0.0/16" # インプット
environment_name = "production" # インプット
}
このように、「どう作るか」という複雑な実装の詳細を隠し、「何を設定するか」というシンプルなインターフェースだけを利用者に提供できます。
2. アウトプット(output)による情報連携
Moduleが作成したリソースの情報(例:VPC ID、サブネットIDなど)を、他のリソースやModuleで利用するために外部に公開するのがアウトプットです。
# Root Moduleで、VPC Moduleのアウトプットを利用するコード例
resource "aws_security_group" "web_sg" {
name = "web-sg"
# 呼び出したModule名.出力名 でアクセス
vpc_id = module.production_vpc.vpc_id
}
🌍 Moduleの種類:どこからコードを持ってくるの?
Moduleのコードがどこに配置されているかによって、使い方が変わってきます。
1. ローカル Module(Internal Module)
あなたのプロジェクト内のサブディレクトリにコードを置いて、そのプロジェクト内だけで再利用する部品です。
- 用途: プロジェクト固有の共通設定や、何度も使うが外部には公開しない部品の再利用。
-
sourceの指定例:./modules/basic-vpc(実行ディレクトリからの相対パス)
2. リモート Module(Remote Module)
プロジェクトの外部(インターネット上やクラウドストレージ)にコードを置いて、広く共有・利用されるModuleです。
代表例: Terraform Registry
- アドレス: https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest
- Terraform公式のリポジトリです。AWSやAzureなどの公式Moduleや、コミュニティによって広く使われている高品質なModuleが公開されています。これを使うことで、VPCやEKSクラスターなど、複雑な構成を一瞬で安全に構築できます。
その他の場所
- GitHub/GitLab: Gitリポジトリとしてホストし、組織内で標準構成を共有する場合などに利用されます。
- S3など: クラウドストレージにコードを配置して利用することも可能です。
この記事があなたのTerraform学習の一助になれば幸いです。
Discussion