Terraform

Terraform Registry入門: 公式モジュールの安全な使い方[Associate対応]

2026-04-19
NicheeLab編集部

Terraform Registryは、モジュールとプロバイダを検索・取得する公式カタログです。実務では“どのモジュールを、どのバージョンで、どう固定するか”が品質と再現性を左右します。

本稿では、Registryにおける検証済み(Verified)モジュールの見分け方、バージョニング、入力/出力の読み解き、プロバイダ連携、導入手順までを、Associate試験の観点を織り交ぜて整理します。

Registryの基礎と“公式”相当モジュールの見分け方

Terraform Registryには、モジュールとプロバイダが公開されています。モジュールは source に「<namespace>/<name>/<provider>」形式のアドレスを指定して参照します (例: terraform-aws-modules/vpc/aws)。

信頼性の目安として、発行元の名前空間、更新頻度、ダウンロード数、README/Examples、Issuesの解消状況、そしてRegistry上のバッジ(Verifiedなど)を確認します。UIやバッジ表記は時期により変わることがありますが、一般に“Verified”は審査済みの発行元であることを示し、品質や保守体制の期待値が高いと判断できます。

  • モジュールのソース表記: <namespace>/<name>/<provider> (例: terraform-aws-modules/vpc/aws)
  • 信頼の目安: Verifiedバッジ、発行元の実績、更新日、READMEの充実度、Examplesの有無
  • 試験観点: Registryでの検索、モジュールの読み方、sourceとversionの指定方法が頻出
種別出所/目印主なメリット主なリスク/注意点
検証済み(Verified)モジュールVerifiedバッジ、実績ある名前空間品質・保守体制の期待値が高い、ドキュメント充実メジャー更新で破壊的変更が入る可能性はゼロではない
コミュニティ(未検証)モジュール一般名前空間、バッジなし選択肢が豊富、ニッチ要件に対応品質ばらつき、メンテ停止リスク
自作モジュール(社内)社内リポジトリ/Private Registry要件適合、審査・セキュリティを自前管理初期開発・保守コスト、知見の属人化

バージョニングと互換性の考え方

モジュールは一般にSemVerに従います。破壊的変更はメジャー、後方互換の追加はマイナー、修正はパッチと期待します。Terraformはモジュールのバージョンを lock ファイルで固定しません。したがって module ブロックの version で必ず制約を明示します。

プロバイダは required_providers で制約し、.terraform.lock.hcl に固定されます(初期化時に作成/更新)。この違いは試験でも問われやすく、実務でも混同しがちです。

  • モジュールの固定: module "..." の version で指定 (例: "~> 5.0")
  • プロバイダの固定: terraform.required_providers と .terraform.lock.hcl
  • アップグレード: terraform init -upgrade で許容範囲内の最新版へ
  • RegistryのRequirements欄でTerraform/Providerの対応バージョンを確認

Inputs/Outputs/Examplesの読み解き方

Registryのモジュール詳細では、Inputs(variables)、Outputs、Resources、Examplesが整理されています。まずExamplesで最小構成を掴み、次にInputsを上から精読して必須/任意、型、デフォルト、nullable、sensitiveを確認します。Outputsは後続モジュールや外部連携で参照する値の起点になります。

サブモジュール(submodules)がある場合は、用途別に分割提供されていることが多いため、過不足なく選ぶことが重要です。

  • Inputsの必須/任意と型整合を最初に確認
  • Examplesと実際の変数名を突き合わせて初期導入を短縮
  • Outputsの名称・型を把握して他リソースの参照に活用
  • sensitive=true の出力はCLI表示抑制。ログ/状態管理に配慮

プロバイダ連携とロックファイルの要点

モジュールは内部でプロバイダを利用しますが、プロバイダの設定・認証情報は原則としてルートモジュール側で行い、必要に応じて providers メタ引数でエイリアスを渡します。リージョン分割や複数アカウント運用では alias の設計が重要です。

.terraform.lock.hcl はプロバイダのバイナリを固定する仕組みであり、モジュールには適用されません。モジュールは version 制約で固定、プロバイダは lock ファイルで固定、という役割分担を押さえてください。

  • required_providers でプロバイダのソースとバージョンを制約
  • provider "aws" { alias = "..." } と module providers で明示的にマッピング
  • lockファイルはVCSで共有し、再現性を担保
  • 認証とリージョンはルートで設定、モジュールへ過不足なく引き渡す

実務手順: VerifiedなVPCモジュール導入の最小例

例として、AWSのVPCを作る検証済みモジュールを採用します。Registryで“terraform-aws-modules/vpc/aws”を検索し、READMEとInputs/Outputs、Requirements、バージョン履歴(CHANGELOG)を確認。メジャーバージョンの互換性に注意しつつ、~> でマイナーパッチだけ許容する形で固定します。

最小構成の例をベースに、CIDRやサブネットの設計指針は自社標準(命名規則、タグ、分割方針)に合わせて変数化します。

  • Registryで対象モジュールを選定し、Verifiedと更新履歴を確認
  • module.versionでSemVer制約を明示 (~> 推奨)
  • terraform init で取得、plan で差分を確認、apply は承認フローに乗せる
  • Outputsを使ってSGやEC2等の後段リソースに値を渡す

最小構成の例(バージョン固定とプロバイダ制約を含む)

terraform {
  required_version = ">= 1.4.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = var.aws_region
}

variable "aws_region" {
  type        = string
  description = "AWS region"
  default     = "ap-northeast-1"
}

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"

  name = "nicheelab-main"
  cidr = "10.10.0.0/16"

  azs             = ["ap-northeast-1a", "ap-northeast-1c"]
  private_subnets = ["10.10.1.0/24", "10.10.2.0/24"]
  public_subnets  = ["10.10.11.0/24", "10.10.12.0/24"]

  enable_nat_gateway = true
  single_nat_gateway = true
  tags = {
    Project = "NicheeLab"
    Env     = "dev"
  }
}

output "vpc_id" {
  value = module.vpc.vpc_id
}

Associate試験の要点と落とし穴

頻出ポイントは、Registryの参照方法(sourceアドレスの形式)、モジュールとプロバイダのバージョン固定の違い、Verified等の信頼性指標、variables/outputsの読み方、そして init/plan/apply の基本フローです。

落とし穴は、moduleのversion未指定による意図せぬアップグレード、providerのalias未設定、Requirements不一致(例えばTerraformやプロバイダの最小バージョン未達)など。

  • sourceは <namespace>/<name>/<provider> を正確に記す
  • moduleはversionで固定、providerはrequired_providersとlockで固定
  • RegistryページのRequirements/Inputs/Outputs/Examplesを優先的に精読
  • init時の -upgrade の挙動を理解し、意図しない更新を避ける

Registryからルート/子モジュール、プロバイダへの流れ

terraform initcallsmodule source/versionusesrequired_providers & lockTerraform Registrymodules/providersルートモジュール自分のコード子モジュールRegistryからProviders

問題で確認

Associate

問題 1

Terraform Registryの検証済み(Verified)モジュールを新規に導入します。将来の予期しない変更で計画外の差分が出ないようにする、最も適切な方法はどれですか?

  1. moduleブロックでSemVerの範囲制約(~> など)を指定してバージョンを固定する
  2. プロバイダのバージョンだけ required_providers で固定すれば、モジュールは固定不要
  3. Gitリポジトリのmainブランチを直接sourceに指定し、最新を常に取得する
  4. terraform init -upgrade を毎回実行し、常に最新へ上げてからapplyする

正解: A

Terraformはモジュールを.lockファイルで固定しないため、moduleブロックのversionでSemVer制約を明示するのが推奨です。プロバイダの固定は.required_providersと.lockファイルで行われますが、モジュールには別途version指定が必要です。ブランチ直参照や毎回のアップグレードは再現性を損ねます。

よくある質問

VerifiedとOfficialはどう違いますか?

Registryでは、HashiCorp所有のプロバイダに“Official”が付く一方、パートナーや審査済み発行元には“Verified”が付与されます。モジュールについては、Verified等の信頼指標と発行元の実績を確認するのが実務的です。UIの表記は変わる可能性があるため、最終的にはREADME、更新履歴、Issues対応状況で判断してください。

モジュールを完全にロックできますか?

モジュールにはプロバイダのような.lockファイルはありません。SemVerで厳格に固定(例: "= 5.1.2" や "~> 5.1")し、terraform init -upgrade を不要時に使わないこと、またCIで terraform version と provider制約を固定することが現実的な対策です。より厳密には、社内Private Registryで監査済みバージョンのみを配布する運用が有効です。

複数のAWSリージョン/アカウントに同じモジュールを適用するには?

ルートで provider "aws" に alias を付けて複数定義し、module側の providers メタ引数でマッピングします。変数化したリージョンやクレデンシャルを使い、ワークスペースや差分のtfvarsで切り替えると安全です。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Terraform

Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける

Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...

Terraform

Terraform Authoring & Ops Pro: 上位資格の範囲と対策

上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...

Terraform

Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす

Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...

Terraform

Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義

Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...

Terraform

Terraform Data Source徹底理解:既存リソースの参照で壊さず足す

Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...

Terraformの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.