Terraform の資格は、基礎の Associate と、実務の深さで分かれる Professional(Authoring / Operations)の三層で理解すると学習が進みます。Associate は概念と基本操作、Authoring はモジュール設計とコード品質、Operations はチーム運用とプラットフォーム活用に比重があります。
本稿は、公式ドキュメントに準拠した安定概念を軸に、試験対策と現場適用を両立する観点で構成しています。バージョン依存の詳細は避け、プロバイダ・状態管理・HCP Terraform(Terraform Cloud/Enterprise)など不変の基礎に焦点を当てます。
Terraform 認定は、インフラ自動化の理解度と役割に応じて段階化されています。Associate は単体の開発者が安全に IaC を扱うための基礎力を評価します。Authoring Professional は再利用可能なモジュールの設計・表現力・品質管理を評価し、Operations Professional はチーム/組織スケールでの運用、状態と権限、ポリシー適用、実行基盤の選定・運用を評価します。
試験学習の観点では、まず CLI ワークフローと状態管理の基礎を固め、その後にコード表現の拡張(変数・型・動的構成・モジュール)、最後に HCP Terraform のワークスペース、ポリシーと RBAC、リモート実行とパイプラインに進むのが無理がありません。
| レベル | 主眼 | 代表トピック |
|---|---|---|
| Associate | 概念と安全な基本操作 | init/plan/apply、state の基本、providers、variables、modules の導入 |
| Authoring Professional | 再利用可能なコードの作成 | module 設計、入力/出力・型・検証、for_each/dynamic、Registry とセマンティックバージョニング |
| Operations Professional | チーム/組織での運用 | remote backend、ロック、HCP Terraform ワークスペース、Sentinel ポリシー、RBAC、VCS 連携と実行フロー |
資格トラックの位置付け(概念図)
Associate
|
v
Authoring Pro <--> Operations Pro
(書く力) (回す力)
\________ 組織的な IaC 成熟度 ________/CLI 基本ワークフロー(Associate の土台)
# ディレクトリ初期化とプラグイン解決
terraform init
# 変更のプレビュー
terraform plan -out=plan.out
# 適用(計画を固定して適用)
terraform apply plan.out
# 破棄(検証用環境など)
terraform destroyAssociate は Terraform のコア概念と安全な日々の操作に焦点があります。provider の仕組み、resource/data の違い、変数と出力、state の役割、CLI ワークフロー、モジュールの基本、そして(必要に応じて)HCP Terraform のワークスペースや実行の基礎を問われます。
実務では、計画の解釈、意図しない破壊の回避、state の場所・ロック・バックアップ方針、変数の取り扱い(環境変数や tfvars)などが安全運用の鍵になります。
| ドメイン | 試験観点 | 実務タスク例 |
|---|---|---|
| 基礎概念 | 宣言的 vs 手続き的、依存関係解決 | resource/data の使い分けの説明 |
| CLI/ワークフロー | init/plan/apply/destroy の意味 | 差分の安全確認と -out の活用 |
| 状態管理 | state の役割・リモート化の利点 | S3 等への移行とロック有効化 |
| モジュール | Registry の利用とバージョン固定 | 組織標準モジュールの参照 |
| HCP Terraform | 基本用語とワークスペース | VCS トリガ実行の把握 |
基本ワークフロー(概念)
[コード] -> terraform init -> terraform plan -> レビュー -> terraform apply
|
state最小構成の例(理解しやすい main.tf)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
}
}
provider "aws" {
region = var.region
}
variable "region" {
type = string
default = "us-east-1"
}
resource "aws_s3_bucket" "example" {
bucket = "nl-associate-example-${random_id.suffix.hex}"
}
resource "random_id" "suffix" {
byte_length = 2
}
output "bucket_name" {
value = aws_s3_bucket.example.id
}Authoring Professional は、モジュール設計とコード品質が中心です。入力の型・検証、出力の安定契約、バージョン互換性、for_each や dynamic ブロック、条件式や関数での表現力が問われます。Registry での公開・バージョニング、破壊的変更を避ける設計判断も評価対象になりやすい領域です。
実務では、モジュールの境界設定、デフォルト値と必須入力のバランス、命名規約、ドキュメント化、例示コードの提供、セマンティックバージョニングによる互換性管理が品質と展開速度を左右します。
| 機能/設計 | 試験での観点 | 実務リスクと対処 |
|---|---|---|
| variables の型/validation | 入力契約の明確さ | 不正値適用の防止、エラーメッセージ整備 |
| outputs の安定性 | 下流互換性 | 出力名の変更は破壊的。非推奨期間を設ける |
| for_each/count/dynamic | 最適な繰り返し選択 | アドレス変更による再作成を最小化 |
| module バージョニング | SemVer の理解 | 破壊的変更は major で明示、依存側は ~> で範囲指定 |
モジュールの公開と利用(概念)
Authoring Dev --> Private/公開 Registry --> Consumer
| | versions: 1.2.3 |
|-- README/例示 ---->| immutability |-- version constraintsモジュール設計スニペット(型・検証・動的ブロック)
# modules/vpc/variables.tf
variable "cidr" {
type = string
description = "VPC CIDR"
validation {
condition = can(cidrhost(var.cidr, 0))
error_message = "cidr には有効な CIDR を指定してください。"
}
}
variable "public_subnets" {
type = map(object({
cidr = string
az = string
}))
}
# modules/vpc/main.tf
resource "aws_vpc" "this" {
cidr_block = var.cidr
tags = { Name = "core-vpc" }
}
resource "aws_subnet" "public" {
for_each = var.public_subnets
vpc_id = aws_vpc.this.id
cidr_block = each.value.cidr
availability_zone = each.value.az
map_public_ip_on_launch = true
tags = {
Name = "public-${each.key}"
}
}
# root/main.tf(利用側)
module "vpc" {
source = "appcorp/vpc/aws"
version = "~> 1.2"
cidr = "10.0.0.0/16"
public_subnets = {
a = { cidr = "10.0.1.0/24", az = "us-east-1a" }
b = { cidr = "10.0.2.0/24", az = "us-east-1b" }
}
}
output "vpc_id" { value = module.vpc.vpc_id }Operations Professional は、状態管理、リモートバックエンド、ロックと並行制御、HCP Terraform(Terraform Cloud/Enterprise)のワークスペース、RBAC、ポリシー(Sentinel)やランタスク、VCS 連携と実行キュー制御など、チーム運用を安全に回す力を評価します。
重要なのは、意図せぬ並行適用や手作業変更の混入を避ける統制です。バックエンドの選定、ワークスペース戦略、実行権限の分離、ポリシーセットの適用、変数/機密の保護、実行ログと監査の活用が試験と実務双方の肝になります。
| 運用テーマ | 公式機能 | キーポイント |
|---|---|---|
| 状態の一元化 | S3/DynamoDB, GCS, AzureRM, HCP Terraform | ロック有効化とアクセス制御 |
| 変更の統制 | VCS 連携、手動トリガ、キュー、承認 | 人手レビューと適用権限の分離 |
| ポリシー適用 | Sentinel ポリシーセット、ランタスク | 違反時の挙動と例外フロー |
| 監査と可視化 | 実行ログ、プラン保存、通知 | 事後追跡とインシデント対応 |
運用パイプライン(HCP Terraform 利用イメージ)
Dev PR -> VCS webhook -> HCP Terraform workspace
|-> plan -> policy check -> apply
| ^
v |
remote state Sentinelバックエンドとクラウド統合の設定例(安定機能)
# 例1: S3 バックエンド(DynamoDB ロック)
terraform {
backend "s3" {
bucket = "tfstate-bucket"
key = "prod/network/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "tfstate-lock"
encrypt = true
}
}
# 例2: Terraform Cloud/HCP Terraform の cloud ブロック
terraform {
cloud {
organization = "acme"
workspaces {
name = "prod-network"
}
}
}
# 代表的な state メンテナンス(要計画・要バックアップ)
# terraform state list
# terraform state mv aws_subnet.public["a"] aws_subnet.public["az-a"]
# terraform state rm aws_eip.legacyまずは単一プロジェクトで state とワークフローに慣れ、次にモジュール化とバージョニング、最後に HCP Terraform とポリシーでチーム運用に拡張する順番が効率的です。各段階で実務タスクを用意し、プランのレビューやロールバック可能性を必ず検証します。
模擬環境は小さく、短時間で作成・破棄できるものに限定します。計測可能なゴール(lint/validate/plan の自動化、モジュールのバージョン更新演習、ワークスペースの RBAC 設定)を置くと試験と実務の両輪が回ります。
| フェーズ | 学習目標 | 実務演習 |
|---|---|---|
| Phase 1: Foundation | CLI/状態/基本構文の確実化 | 単一環境で S3 backend とロックを導入 |
| Phase 2: Authoring | モジュール設計と互換性管理 | Registry 参照・version 範囲指定・非互換変更の検出 |
| Phase 3: Operations | HCP Terraform と統制 | VCS 連携、ポリシーセット適用、RBAC 設計のレビュー |
学習の段階化
Foundation --> Authoring --> Operations
state/CLI modules TFC/TFE + policy/RBACCI で最低限の品質ゲートを作る例(言語非依存のシェル)
# フォーマットと構文検証
terraform fmt -check
terraform validate
# 計画作成とアーティファクト化
terraform plan -out=plan.out
terraform show -no-color plan.out > plan.txt
# 失敗時に PR をブロックする(CI の失敗で評価)
# exit 1 を返すだけで十分なガードになる落とし穴の多くは、リソースアドレスの変更、状態の手動編集、バージョン不一致、ワークスペース・変数の誤用に起因します。試験では意図しない再作成や破壊的変更を回避する設計・手順が問われやすく、現場でも同様です。
特に Operations 領域では、並行実行、権限の過不足、ポリシーの適用レベルの誤設定が事故に直結します。実行前のレビューと実行後の監査ログ確認をルーチン化しましょう。
| 落とし穴 | 回避策 | 試験での観点 |
|---|---|---|
| アドレス変更で再作成 | キー/インデックスの安定化、migrate state での移行 | 差分の結果予測と安全な移行手順 |
| state 手動編集 | コマンドでの移行とバックアップ徹底 | state の信頼性維持 |
| バージョン不一致 | required_providers/module の version 範囲指定 | 再現性とビルドの安定 |
| ポリシー誤設定 | 適用レベルと例外フローの設計 | 統制と開発速度のバランス |
再現性を壊す要因の関係
Versions -----> Plan reproducibility <----- State location
| ^ |
v | v
Module/API changes Drift risk ConcurrencyS3 バックエンドと Sentinel ポリシーの最小例
# backend(再掲:状態の一元化)
terraform {
backend "s3" {
bucket = "tfstate-bucket"
key = "dev/app/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "tfstate-lock"
encrypt = true
}
}
# Sentinel(Terraform Cloud/Enterprise 用の例、適用レベルは運用で設定)
# ファイル: restrict-instance-type.sentinel
import "tfplan/v2" as tfplan
allowed = ["t3.micro", "t3.small", "t3.medium"]
main = rule {
all tfplan.resources.aws_instance as r {
all r.applied as inst { inst.instance_type in allowed }
}
}Associate / Pro
問題 1
組織が HCP Terraform(Terraform Cloud/Enterprise)で本番ワークスペースを運用しています。計画外のインフラ変更を防ぎつつ、plan の内容をレビューしてから適用したい要求があります。最も適切な構成はどれですか?
正解: A
HCP Terraform の VCS 連携と実行キュー、手動承認フローを使えば、plan をレビューしてから安全に apply できます。必要に応じて Sentinel ポリシーで統制を強化します。他の選択肢は state 分散や事後検知に偏り、リスクが高いです。
Associate と Authoring/Operations Professional のどちらを先に受けるべきですか?
多くの受験者は Associate を先に受けて基礎を固め、その後に自分の職務に近い Professional(コード設計中心なら Authoring、運用・統制中心なら Operations)に進みます。
HCP Terraform を使わない環境でも Operations Professional の学習は意味がありますか?
はい。リモート state、ロック、並行制御、RBAC やポリシーの考え方はプラットフォームに依存しない運用原則です。HCP Terraform 固有の機能名は置き換えつつ、概念を習得しておく価値があります。
テストや lint は試験に必須ですか?
試験は公式機能と運用原則に重心があります。lint/サードパーティは必須ではありませんが、terraform validate や plan の活用、モジュールの契約(型・検証)など品質を高める公式手段は理解しておくと有利です。
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を用いた既存リソース参照の基本、選択基準、評価順序、...