Terraformモジュールの概要
共通するインフラパターンをカプセル化して再利用できるモジュールの利点を理解し、コードの整理と保守性を高めます。
「Terraformモジュールの概要」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Terraform モジュールとは
Terraform のモジュールは、Terraform 構成をまとめた自己完結型のパッケージです。プログラミング言語における関数やクラスのようなものだと考えてください。関連するリソースをまとめて、1 つの単位として管理できます。
モジュールを使うとインフラストラクチャコードを整理でき、特に大規模なプロジェクトで管理しやすくなります。
Terraform モジュールを使う理由
モジュールには、Infrastructure as Code に次のような重要なメリットがあります。
- 再利用性:インフラストラクチャの一部を一度定義すれば、複数のプロジェクトや環境で繰り返し使用できます。
- 整理:複雑な構成を、より小さく管理しやすい論理的なコンポーネントに分割できます。
- 一貫性:リソースを毎回標準化された方法でプロビジョニングでき、構成ドリフトやエラーを減らせます。
- コラボレーション:チームでモジュールを開発・共有できるため、開発を迅速化し、標準を維持できます。
モジュールの構造を理解する
Terraform モジュールは基本的に、1 つ以上の .tf ファイルを含むディレクトリです。柔軟に構成できますが、一般的には次のような構造にします。
main.tf:モジュールが作成する主要なリソースを定義します。variables.tf:モジュールの動作をカスタマイズする入力変数を宣言します。outputs.tf:モジュールの呼び出し元に公開する出力値を定義します。versions.tf:モジュールで使用する Terraform と provider のバージョン制約を指定します。
このように整理された構造にすると、コードを整然と分かりやすく保てます。
最初のモジュールコード
AWS S3 バケットを作成する非常にシンプルなモジュールを定義してみましょう。通常、このコードは modules/my_s3_bucket/main.tf のように専用のディレクトリに配置します。
この完全なファイルを root module として実行し、動作を確認することもできますが、ここでは主にモジュール内部の構造を示すことを目的としています。
provider "aws" {
region = "us-east-1" # Example region
}
variable "bucket_name" {
description = "Name for the S3 bucket."
type = string
}
variable "acl_setting" {
description = "ACL for the S3 bucket."
type = string
default = "private"
}
resource "aws_s3_bucket" "example_bucket" {
bucket = var.bucket_name
acl = var.acl_setting
tags = {
Environment = "Dev" # Example tag
}
}
output "bucket_id" {
description = "The ID of the S3 bucket."
value = aws_s3_bucket.example_bucket.id
}
output "bucket_arn" {
description = "The ARN of the S3 bucket."
value = aws_s3_bucket.example_bucket.arn
}モジュールの入力:変数
入力変数を使うと、モジュールの中核となるコードを変更せずに、モジュールの動作をカスタマイズできます。入力変数は、モジュールディレクトリ内の variables.tf ファイルで定義します。
モジュールを呼び出すときにこれらの変数へ値を渡すことで、さまざまなシナリオや環境で高い再利用性を実現できます。関数の引数のようなものだと考えてください。
variable "bucket_name" {
description = "Name for the S3 bucket."
type = string
}
variable "acl_setting" {
description = "ACL for the S3 bucket."
type = string
default = "private"
}モジュールの出力:データの公開
出力値は、モジュールから呼び出し元の構成へデータを公開するために使用します。これにより、モジュールが作成したリソースの重要な情報にアクセスできます。
出力はモジュールディレクトリ内の outputs.tf ファイルで定義し、Terraform 構成の他の部分や、別のモジュールから参照できます。
output "bucket_id" {
description = "The ID of the S3 bucket."
value = aws_s3_bucket.example_bucket.id
}
output "bucket_arn" {
description = "The ARN of the S3 bucket."
value = aws_s3_bucket.example_bucket.arn
}カスタムモジュールを呼び出す
my_s3_bucket モジュールを定義できたので、root configuration から呼び出してみましょう。source 属性で、Terraform がモジュールを見つける場所を指定します。
ローカルモジュールの場合は、モジュールのディレクトリへの相対パスを指定します。モジュールの入力変数に値を渡し、公開された出力値にアクセスできます。
provider "aws" {
region = "us-east-1"
}
module "my_website_bucket" {
source = "./modules/my_s3_bucket" # Path to your local module
bucket_name = "my-unique-website-bucket-12345"
acl_setting = "public-read"
}
output "website_bucket_arn" {
description = "ARN of the website S3 bucket."
value = module.my_website_bucket.bucket_arn
}
output "website_bucket_id" {
description = "ID of the website S3 bucket."
value = module.my_website_bucket.bucket_id
}モジュールのさまざまなソース
モジュールはローカルにあるものだけではありません。Terraform はさまざまなソースからモジュールを取得できるため、柔軟に利用できます。
- ローカルパス:
./modules/my_module(例で使用したもの) - Terraform Registry:
hashicorp/vpc/aws(一般公開されているモジュール) - Git リポジトリ:
git::https://example.com/repo.git - S3 バケット:
s3::https://s3-us-west-2.amazonaws.com/example-bucket/module.zip
Terraform Registry は、一般的なインフラストラクチャパターン向けの、すぐに使えてコミュニティによって検証されたモジュールを見つけるのに適しています。
モジュールがもたらす実践的な効果
複数の環境(開発、ステージング、本番)にまたがる何百ものリソースを管理する状況を想像してください。モジュールがなければ、巨大で重複の多い構成ファイルを作成することになります。
モジュールを使えば、「ウェブサーバー」や「データベース」といったパターンを一度定義できます。その後、環境ごとの設定に異なる変数を渡しながら、各インスタンスでそのモジュールを呼び出すだけです。これによりエラーが大幅に減り、更新が簡単になり、インフラストラクチャのスケーラビリティが本当に高まります。
クイックチェック
Terraform モジュールの構造とメリットについて学びました。ここで、重要なメリットを 1 つ挙げられるか確認してみましょう。
振り返りと次のステップ
このレッスンでは、インフラストラクチャコードを整理・再利用するための強力なツールとして、Terraform モジュールを紹介しました。次のことを学びました。
- モジュールはリソースを再利用可能な単位にカプセル化します。
- コードの整理、一貫性、再利用性が向上します。
- モジュールでは、入力に
variables.tf、公開するデータにoutputs.tfを使用します。 - ローカルパス、レジストリ、Git リポジトリからモジュールを呼び出せます。
次は、再利用可能な独自モジュールの作成について詳しく学び、より高度なパターンとベストプラクティスを確認します。
よくある質問
「Terraformモジュールの概要」レッスンは無料ですか?
はい。「Terraformモジュールの概要」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Terraformモジュールの概要」で何を学びますか?
共通するインフラパターンをカプセル化して再利用できるモジュールの利点を理解し、コードの整理と保守性を高めます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Terraformモジュールの概要」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Terraformモジュールの概要
- 再利用可能なモジュールの作成
- 環境にワークスペースを使用する
- レジストリへのモジュール公開