Terraformの資格対策は、単に用語を覚えるより、CLIとコードで一連のワークフローを体験する方が圧倒的に早いです。本稿では、HashiCorp公式Learn(https://developer.hashicorp.com/terraform/learn)を主軸に、最短で合格点に届くハンズオン設計を提示します。
バージョンや出題範囲は更新され得るため、細かな仕様は必ず公式ドキュメント(https://developer.hashicorp.com/terraform)と公式認定ページ(https://developer.hashicorp.com/certifications/infrastructure-automation)で最新情報を確認しつつ進めてください。ここでは安定した概念と一般的なベストプラクティスに絞って解説します。
AssociateはTerraformのワークフロー(init/plan/apply/destroy)、状態管理、基本的なモジュール化、変数・出力の扱い、依存関係解決を中心に問われます。Professionalはこれに加え、複数環境の運用、チーム開発、リファクタリング、リモートバックエンド、ガバナンス、高度なトラブルシュートなどの設計力が求められます。
表の観点で、どのドメインを何で鍛えるかを明確にしてからLearnのユニットとハンズオンを当て込みます。重箱の隅をつつくより、状態と計画の整合性、コードの再利用性、ドリフト検出・取り込みの手順を早めに体験するのが効率的です。
| トピック | Associateのねらい | Professionalのねらい | ハンズオン課題 |
|---|---|---|---|
| ワークフロー | init/plan/apply/destroyの基本と差分理解 | 計画の安定化と安全な適用戦略 | 失敗するplan/applyパターンを意図的に作り原因特定 |
| 状態管理 | tfstateの役割と基本操作 | リモート状態・ロック・並行制御・参照 | S3+DynamoDBやTerraform CloudのStateでロック検証 |
| モジュール | 入出力・呼び出しとバージョン固定 | レジストリ配布・標準化・破壊的変更の扱い | 共通タグ付与モジュールを作り複数環境へ展開 |
| プロバイダ | 認証と基本リソース | 複数プロバイダ・別リージョン・alias運用 | 別リージョンで同一構成をデプロイし依存解決を確認 |
| 運用/チーム | 基本的なコードレビュー観点 | CI/CD、ポリシー、ワークスペース戦略 | PRでplan、mainでapplyのパイプラインを構築 |
公式Learnは小さな演習が多く、そのまま順にやると点が線になりにくいことがあります。下記の順序で、最小構成→状態→モジュール→バックエンド→チーム運用の流れに並べ替えると、資格と実務の両方に効きます。
教材はクラウド固有の差異を抽象化して読むのがコツです。AWS・Azure・GCPいずれでも、プロバイダの認証と通信、依存解決、状態の一貫性という核は同じです。
学習パスの全体像
最初のチェック: CLIとプロバイダの健全性
terraform -version
terraform init -upgrade
terraform providersまずは単一のリソースで差分と依存の感覚を掴みます。続いてdataソースで既存情報を参照し、出力で実行結果を確認。最後に小さなモジュールに切り出し、バージョンを固定して再利用を体験します。
クラウドの選択は自由ですが、資格対策では典型リソース(例: AWSではS3、IAMロールなど)を選ぶと出題意図と重なりやすいです。認証情報は環境変数やプロファイルで渡し、コードに直書きしないこと。
最小例: 単一リソースとモジュール呼び出し
# main.tf
terraform {
required_version = ">= 1.4"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 5.0"
}
}
}
provider "aws" {
region = var.region
}
module "bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = ">= 4.0"
bucket = var.bucket_name
acl = "private"
tags = {
managed_by = "terraform"
env = var.env
}
}
# variables.tf
variable "region" { type = string }
variable "env" { type = string }
variable "bucket_name" {
type = string
description = "S3 bucket name"
}
# outputs.tf
output "bucket_id" {
value = module.bucket.s3_bucket_id
}
tfstateは唯一の真実です。ローカル状態で仕組みを理解したら、早めにリモートバックエンドへ移行してロックと並行実行の挙動を確認しましょう。S3+DynamoDBやTerraform Cloudのリモート状態はいずれもよく出る話題です。
バックエンド移行は安全に行います。terraform init -migrate-stateで既存の状態を移行し、差分が出ないことをplanで確認。ワークスペースを使う場合は命名規約と環境変数のスコープを設計してから増やします。
S3バックエンド例と基本オペレーション
# backend.tf
terraform {
backend "s3" {
bucket = "my-tfstate-bucket"
key = "infra/dev/terraform.tfstate"
region = "ap-northeast-1"
dynamodb_table = "my-tf-lock"
encrypt = true
}
}
# 初期化と移行
terraform init -migrate-state
# ワークスペース操作
terraform workspace list
terraform workspace new dev
terraform workspace select dev
# 状態の参照
terraform state list
terraform state show aws_s3_bucket.this実務では既存リソースの取り込みとドリフト解消が頻出です。planで差分を把握し、必要に応じてimportでTerraform管理下に移します。取り込み後はコードと実体の差を潰し、不要ならterraform state rm、構成を合わせるならコード修正で整合させます。
従来のterraform importコマンドに加え、Terraformのバージョンによってはimportブロックが使えます。環境のバージョン方針に合わせ、どちらを採るかを決めてください。いずれの場合も、取り込み対象のアドレスとIDは正確に。
importの2つのやり方(バージョン方針に合わせて選択)
# 1) 従来のCLI import(広く使える)
terraform import aws_s3_bucket.example my-existing-bucket
# 2) importブロック(対応バージョンのみ)
# import.tf
# import {
# to = aws_s3_bucket.example
# id = "my-existing-bucket"
# }
# terraform plan
模擬問題は用語の確認に有効ですが、最後は自分のリポジトリで再現できるかが勝負です。エラーや警告の原因を言語化し、再発防止の手をコードに落とせるかを確認しましょう。
Proを目指す場合は、複数環境/複数プロバイダの構成管理、バージョンピン留め、CIでのplan差分レビュー、アクセス制御とロール分離までを一連で通せると安定します。
planの機械可読出力でレビューを厳密化
# JSON化して差分をCIで検査
terraform plan -out=tfplan
terraform show -json tfplan > plan.json
# plan.jsonをCIでlint/ポリシー検査に回す(例: 変更許可タグの有無など)Associate / Pro
問題 1
既存のクラウドリソースをTerraformの管理下へ安全に取り込む必要があります。最も適切な手順はどれですか。
正解: A
importは状態のみを作るため、コードと実体の一致が必須。まずコードを用意し、planで差分を把握しつつ、importで状態に紐付け、最終的にコード側を合わせるのが安全。tfstate直接編集は非推奨、state rmやbackend変更は取り込みの解決策ではない。
AssociateとProfessionalのどちらから受けるべきですか?
初受験ならAssociateからを推奨します。ワークフローと状態の基礎を実務レベルで固められます。チーム運用や複数環境の設計・CI連携まで日常的に扱っているなら、間を空けずProfessionalへ進むのが効率的です。
どのバックエンドを練習すればよいですか?
まずはTerraform Cloudのリモート状態か、AWSのS3+DynamoDBロックのどちらか。概念は共通で、ロック、権限、並行制御、migrate-stateの手順を体験できれば試験・実務とも十分に戦えます。
バージョン差異への対処は?
必ずterraform -versionを明示し、required_versionでピン留めします。挙動に迷いがあれば公式Docs(https://developer.hashicorp.com/terraform)で該当プロバイダやコマンドの最新仕様を確認し、学習ノートに根拠URLを記録してください。
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を用いた既存リソース参照の基本、選択基準、評価順序、...