0Pricing
Terraform Infrastructure as Code · レッスン

Terraformモジュールの概要

共通するインフラパターンをカプセル化して再利用できるモジュールの利点を理解し、コードの整理と保守性を高めます。

「Terraformモジュールの概要」はCoddyKit上の無料Terraform Infrastructure as Codeレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTerraform Infrastructure as Code学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Terraform Infrastructure as Codeコースには全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チューター)、Terraform Infrastructure as Codeコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

「Terraformモジュールの概要」で何を学びますか?

共通するインフラパターンをカプセル化して再利用できるモジュールの利点を理解し、コードの整理と保守性を高めます。 ブラウザで直接実行するハンズオンコードでTerraform Infrastructure as Codeを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Terraform Infrastructure as Codeを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTerraform Infrastructure as Codeは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Terraformモジュールの概要」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTerraform Infrastructure as Codeレッスンでコードを書いて実行できますか?

はい。すべてのTerraform Infrastructure as Codeレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Terraformモジュールの概要
  2. 再利用可能なモジュールの作成
  3. 環境にワークスペースを使用する
  4. レジストリへのモジュール公開
← Terraform Infrastructure as Codeに戻る