Terraform Registryは、モジュールとプロバイダを検索・取得する公式カタログです。実務では“どのモジュールを、どのバージョンで、どう固定するか”が品質と再現性を左右します。
本稿では、Registryにおける検証済み(Verified)モジュールの見分け方、バージョニング、入力/出力の読み解き、プロバイダ連携、導入手順までを、Associate試験の観点を織り交ぜて整理します。
Terraform Registryには、モジュールとプロバイダが公開されています。モジュールは source に「<namespace>/<name>/<provider>」形式のアドレスを指定して参照します (例: terraform-aws-modules/vpc/aws)。
信頼性の目安として、発行元の名前空間、更新頻度、ダウンロード数、README/Examples、Issuesの解消状況、そしてRegistry上のバッジ(Verifiedなど)を確認します。UIやバッジ表記は時期により変わることがありますが、一般に“Verified”は審査済みの発行元であることを示し、品質や保守体制の期待値が高いと判断できます。
| 種別 | 出所/目印 | 主なメリット | 主なリスク/注意点 |
|---|---|---|---|
| 検証済み(Verified)モジュール | Verifiedバッジ、実績ある名前空間 | 品質・保守体制の期待値が高い、ドキュメント充実 | メジャー更新で破壊的変更が入る可能性はゼロではない |
| コミュニティ(未検証)モジュール | 一般名前空間、バッジなし | 選択肢が豊富、ニッチ要件に対応 | 品質ばらつき、メンテ停止リスク |
| 自作モジュール(社内) | 社内リポジトリ/Private Registry | 要件適合、審査・セキュリティを自前管理 | 初期開発・保守コスト、知見の属人化 |
モジュールは一般にSemVerに従います。破壊的変更はメジャー、後方互換の追加はマイナー、修正はパッチと期待します。Terraformはモジュールのバージョンを lock ファイルで固定しません。したがって module ブロックの version で必ず制約を明示します。
プロバイダは required_providers で制約し、.terraform.lock.hcl に固定されます(初期化時に作成/更新)。この違いは試験でも問われやすく、実務でも混同しがちです。
Registryのモジュール詳細では、Inputs(variables)、Outputs、Resources、Examplesが整理されています。まずExamplesで最小構成を掴み、次にInputsを上から精読して必須/任意、型、デフォルト、nullable、sensitiveを確認します。Outputsは後続モジュールや外部連携で参照する値の起点になります。
サブモジュール(submodules)がある場合は、用途別に分割提供されていることが多いため、過不足なく選ぶことが重要です。
モジュールは内部でプロバイダを利用しますが、プロバイダの設定・認証情報は原則としてルートモジュール側で行い、必要に応じて providers メタ引数でエイリアスを渡します。リージョン分割や複数アカウント運用では alias の設計が重要です。
.terraform.lock.hcl はプロバイダのバイナリを固定する仕組みであり、モジュールには適用されません。モジュールは version 制約で固定、プロバイダは lock ファイルで固定、という役割分担を押さえてください。
例として、AWSのVPCを作る検証済みモジュールを採用します。Registryで“terraform-aws-modules/vpc/aws”を検索し、READMEとInputs/Outputs、Requirements、バージョン履歴(CHANGELOG)を確認。メジャーバージョンの互換性に注意しつつ、~> でマイナーパッチだけ許容する形で固定します。
最小構成の例をベースに、CIDRやサブネットの設計指針は自社標準(命名規則、タグ、分割方針)に合わせて変数化します。
最小構成の例(バージョン固定とプロバイダ制約を含む)
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
}
頻出ポイントは、Registryの参照方法(sourceアドレスの形式)、モジュールとプロバイダのバージョン固定の違い、Verified等の信頼性指標、variables/outputsの読み方、そして init/plan/apply の基本フローです。
落とし穴は、moduleのversion未指定による意図せぬアップグレード、providerのalias未設定、Requirements不一致(例えばTerraformやプロバイダの最小バージョン未達)など。
Registryからルート/子モジュール、プロバイダへの流れ
Associate
問題 1
Terraform Registryの検証済み(Verified)モジュールを新規に導入します。将来の予期しない変更で計画外の差分が出ないようにする、最も適切な方法はどれですか?
正解: 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で切り替えると安全です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...