Terraform Cloud/Enterprise の Private Registry は、組織内の標準モジュールやプライベートプロバイダを一元配布する仕組みです。VCS のタグからバージョンを検出し、terraform init がレジストリから解決する点は Public Registry と同様ですが、アクセス制御や発行フローに組織固有の要件が加わります。
本稿は Terraform のプロレベル試験を意識しつつ、現場でハマりやすい命名・タグ付け・認証・source 文字列・ロックファイルの扱いまで、安定した仕様に絞って解説します。
Terraform Cloud/Enterprise の Private Registry は、組織単位でモジュールとプライベートプロバイダを公開・検索・バージョン管理できる機能です。モジュールは主に VCS 連携で SemVer タグから登録され、プロバイダはレジストリ・プロトコルに沿ったバイナリ/署名/チェックサムをリリースとして登録します。
利用側は module ブロックや required_providers の source に組織ホスト名と名前空間を含むアドレスを指定します。terraform init は CLI 資格情報(ローカル実行)または Terraform Cloud の実行環境(リモート実行)を介して Private Registry にアクセスします。
Private Registry の利用フロー(概念図)
モジュールは VCS 連携で公開します。レジストリが自動検出できるよう、リポジトリ名とバージョンタグ、標準構成を満たす必要があります。特にリポジトリ名のプレフィックスと SemVer タグは、UI の候補一覧やバージョン解決に直結します。
安定仕様として、以下を守れば検出とドキュメント生成(README, Inputs/Outputs)が確実です。
Private Registry のモジュールは registry アドレスで参照します。依存の固定は required_providers の version 制約および module ブロックの version で行い、実際のハッシュや署名鍵情報は .terraform.lock.hcl に保存されます。ローカル実行では credentials.tfrc.json(もしくは TF_TOKEN_app_terraform_io)が必須です。
プロバイダは required_providers で source を app.terraform.io/<org>/<provider> と明示し、terraform init によりバイナリと署名が検証されます。ロックファイルはレジストリホスト名も含めて解決先を固定するため、チームで共有するのが推奨です。
| 比較対象 | 参照書式 | バージョニング/取得元 | 主な利点・注意点 |
|---|---|---|---|
| TFC Private Registry(モジュール) | app.terraform.io/<org>/<name>/<provider> | SemVer タグ vX.Y.Z を VCS から検出 | 組織内配布とRBAC。VCS命名/タグ要件に注意。 |
| Public Registry(モジュール) | registry.terraform.io/<namespace>/<name>/<provider> | SemVer(公開審査あり) | 広く再利用可。非公開要件には不向き。 |
| Git 直接参照(モジュール) | git::https://...//path?ref=tag | ref でブランチ/タグ/SH A を指定 | レジストリ機能(検索/ドキュメント/権限)を使えない。 |
Private Registry の参照例(module と provider)+ CLI 認証
# main.tf
terraform {
required_version = ">= 1.3"
required_providers {
mycloud = {
source = "app.terraform.io/my-org/mycloud"
version = "~> 1.4"
}
}
}
provider "mycloud" {}
module "vpc" {
source = "app.terraform.io/my-org/vpc/aws"
version = "~> 1.2"
name = "prod-vpc"
}
# ローカル実行の認証(いずれか)
# 1) terraform login で作成される ~/.terraform.d/credentials.tfrc.json の例
# {
# "credentials": {
# "app.terraform.io": {"token": "<redacted>"}
# }
# }
# 2) 環境変数: TF_TOKEN_app_terraform_io=<token>プライベートプロバイダは、Terraform のプロバイダ・レジストリ・プロトコルに準拠した成果物(OS/アーキテクチャ別のアーカイブ、SHA256SUMS、署名)を Private Registry に登録します。Terraform Cloud/Enterprise はレジストリ API を実装しており、UI または API でバージョンを公開できます。
利用側は required_providers で source に app.terraform.io/<org>/<provider> を指定します。初回 init 時に署名鍵とチェックサムが .terraform.lock.hcl に記録され、以降は復元性とサプライチェーンの一貫性が維持されます。公開時は SemVer を守り、破壊的変更を避けるためのプレリリース検証を十分に行ってからリリースするのが実務的です。
Private Registry の発行は権限が必要です。組織・チームに対して、モジュール/プロバイダの公開を許可する権限を付与し、利用者には読み取り権限を与えます。CI/CD からのローカル実行では、ユーザトークンあるいはチームトークンを安全に保管し、TF_TOKEN_app_terraform_io で供給します。
運用では、SemVer と CHANGELOG の厳守、破壊的変更の計画的リリース、README と I/O ドキュメントの整備、非推奨バージョンの明示、タグ保護(保護ブランチ/リリース権限の制御)を基本とします。
モジュールが UI に出ない場合は、リポジトリ名のプレフィックス(terraform-...)、SemVer タグ(vX.Y.Z)、VCS 連携の権限を確認します。terraform init で 401/403/404 が出る場合は、credentials.tfrc.json/TF_TOKEN_app_terraform_io、source のホスト名の有無、プロキシ越しのネットワーク制限を点検します。
試験対策としては、レジストリアドレスの構文、SemVer の要件、ロックファイルの役割、ローカルとリモート実行時の認証の違いを正確に説明できることが重要です。
Pro
問題 1
Terraform Cloud の Private Registry で公開したモジュールをローカル実行の terraform init から利用する前提として正しいものはどれか。
正解: A
Private Registry からの取得には認証が必要です。ローカル実行では terraform login によるトークン保存、または TF_TOKEN_app_terraform_io の設定が必要です。モジュール公開には SemVer タグが必要で、プライベートプロバイダの source には app.terraform.io/<org>/<provider> のようにホスト名が必須です。
モジュールが Private Registry の追加画面に出てこないのはなぜ?
多くは命名とタグが原因です。リポジトリ名が terraform-<name>-<provider> になっているか、SemVer タグ vX.Y.Z が push されているか、Terraform Cloud の VCS 接続で当該リポジトリにアクセス権があるかを確認してください。
CI から Private Registry を使うにはどう認証すればよい?
ユーザトークンやチームトークンをシークレットストアに保管し、ジョブ実行時に TF_TOKEN_app_terraform_io 環境変数として注入するか、credentials.tfrc.json を安全に配布します。トークンは最小権限で発行し、ローテーション方針を定めてください。
Public Registry のモジュールを Private Registry にミラーしたい。
Terraform Cloud には自動ミラー機能はありません。実務では Public のリポジトリをフォークし、組織の VCS に取り込み、SemVer タグ/命名/README を整えて Private Registry に公開します。参照先を app.terraform.io/<org>/... に切り替えれば社内統制下で配布できます。
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を用いた既存リソース参照の基本、選択基準、評価順序、...