IaCが当たり前になった今、Terraformスキルは“できると便利”から“無いと困る”に移行しました。実務での再現性・監査性・スケールの担保はもちろん、採用市場では「コードでインフラを説明できるか」が明確な評価軸になっています。
本記事では、Terraform AssociateとInfrastructure Automation Professional(HashiCorp認定)を意識しつつ、実務に直結するプラクティスとキャリア設計を具体的にまとめます。
Terraformは宣言的な構成とプロバイダモデルにより、クラウド横断のプロビジョニングを一貫化できます。人依存の手順をなくし、状態管理と差分適用で“いつ・何が・なぜ変わったか”を説明可能にする点が、監査やSRE運用に直結します。
採用市場では、モジュール化・状態の分離・チーム運用(VCS/CIやTerraform Cloud連携)を経験しているかが評価されます。Associateは基礎の理解、Professionalは組織や大規模化に耐える設計力が問われる傾向です。
| 運用アプローチ | 再現性/監査性 | スケール時のリスク |
|---|---|---|
| 手作業(コンソール) | 低い:手順が人依存・証跡が散逸 | 高い:属人化・差分不明 |
| スクリプト(CLI寄せ集め) | 中:命令型で変更意図が不透明 | 中:依存順や例外処理が膨張 |
| Terraform(宣言的+状態) | 高:差分と意図が明確 | 低:モジュール/ワークスペースで分割統治 |
IaCパイプラインの全体像
Dev -> VCS (Git)
|
v
CI Pipeline
|
v
terraform plan/apply
|
v
Providers Layer
[AWS][Azure][GCP][SaaS]
|
v
Provisioned Infra最小構成の例(再現可能なVPC作成の骨格)
terraform {
required_version = ">= 1.4"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.region
}
resource "aws_vpc" "main" {
cidr_block = var.cidr
tags = { Name = "nl-main" }
}
variable "region" { type = string }
variable "cidr" { type = string }Associateはコア概念(リソース/データソース、モジュール、状態、プラン/アプライ、基本のプロバイダ設定、Terraform Cloudの基礎)を正確に扱えることが主眼です。
Professional(Infrastructure Automation - Professional)は、組織規模の標準化、ポリシー適用、マルチ環境/マルチクラウド設計、チームワークフローの最適化など、設計判断と運用設計力が問われます。
| スキル領域 | Associateの到達点 | Professionalの到達点 |
|---|---|---|
| 状態管理/Backend | ローカル/リモートの使い分けを理解 | 組織横断の命名・ロック戦略を設計 |
| モジュール戦略 | 公式/社内モジュールを再利用 | 抽象化境界とバージョニングで長期運用 |
| チーム運用 | VCS連携と基本のPRフロー | TFC/Eワークスペース設計・ポリシー適用・RBAC |
| マルチクラウド | 単一クラウドで安定運用 | Provider別の差分吸収と共通モジュール指針 |
学習と責務の段階
[Reader] -> [Author] -> [Module Maintainer] -> [Platform IaC Lead]
(HCL) (State/Plan) (Version/API) (Org Design)データソースと出力の基礎(planを読み解く練習に有効)
data "aws_caller_identity" "self" {}
output "account_id" {
value = data.aws_caller_identity.self.account_id
}
# plan出力でデータ取得とリソース作成の差分を確認する現場評価につながるのは“壊れにくさ”と“説明可能性”です。バージョン固定、状態のリモート管理、変更の小分け、入力検証、コード規約の自動化は面接でも具体例が問われます。
バックエンドやロック、モジュールのバージョニングは、安定したCI/CDとチームスケールの前提条件になります。
| アンチパターン | 推奨パターン | 根拠(安定概念) |
|---|---|---|
| プロバイダ未固定 | required_providersと.lockで固定 | 再現性と計画可能性 |
| ローカルstate共有 | リモートstate+ロック | 同時実行の安全性 |
| 肥大化ルートmodule | 小さな再利用可能module | 変更影響の局所化 |
| 平文の機密値 | 変数/環境変数/シークレット管理 | 漏洩リスク低減 |
リモートバックエンドとロックの流れ
terraform init -> Backend (S3/TFC)
plan/apply -> Acquire Lock
|
v
State Update
|
v
Release LockS3バックエンドとDynamoDBロック、Provider固定の例
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
}
backend "s3" {
bucket = "nl-tf-state"
key = "network/prod/terraform.tfstate"
region = "ap-northeast-1"
dynamodb_table = "nl-tf-lock"
encrypt = true
}
}
provider "aws" { region = "ap-northeast-1" }Provider差分は“認証方式・命名・制限”などに表れます。モジュールの入力と出力を正規化し、各クラウド固有値はモジュール内で吸収すると拡張が容易です。
aliasや複数providerブロック、明示的な依存関係(depends_onの乱用は避ける)を理解すると、複数アカウント/サブスクリプション運用の安全性が上がります。
| Provider | 認証の一般的方式 | 設計ノート |
|---|---|---|
| AWS | IAMロール/アクセスキー | タグ戦略で横断検索を容易に |
| Azure | Service Principal/Managed Identity | リソースグループ単位で境界管理 |
| GCP | Service Account/ADC | プロジェクト/フォルダ階層で権限分離 |
共通モジュールとクラウド固有moduleの分離
[app-network-common]
/ | \
[aws-net] [az-net] [gcp-net]
\ | /
Consistent Outputs複数Providerとalias、モジュールの呼び出し例
provider "aws" {
alias = "prod"
region = "ap-northeast-1"
}
provider "aws" {
alias = "shared"
region = "us-west-2"
}
module "vpc_prod" {
source = "git::https://example.com/modules/aws-vpc.git?ref=v1.2.3"
providers = {
aws = aws.prod
}
name = "nl-prod"
cidr_block = "10.10.0.0/16"
}
module "vpc_shared" {
source = "git::https://example.com/modules/aws-vpc.git?ref=v1.2.3"
providers = {
aws = aws.shared
}
name = "nl-shared"
cidr_block = "10.20.0.0/16"
}Terraform Cloud/Enterpriseは、リモートバックエンド、実行(Run)管理、VCS連携、ポリシーチェック、変数セット、RBACなどチーム機能を提供します。これらは組織スケールでの再現性と監査性を担保します。
試験観点では、ワークスペース設計(環境ごとに分割)、実行モード(VCS/CLI/API)、変数管理、ポリシー適用の基本を押さえておくと有利です。
| 機能 | 価値 | 試験ポイント |
|---|---|---|
| Remote State/Run | 一元的な状態と実行履歴 | 状態の分離と履歴確認 |
| VCS連携 | PRでplan・差分の可視化 | トリガーと実行モードの違い |
| Variables/Var Sets | 機密と共通値の安全な管理 | 優先順位と継承 |
| Policies | 組織ガードレール | 適用タイミングと評価結果 |
TFCワークスペースの基本フロー
Commit -> VCS Hook -> TFC Workspace
| |
v v
Plan (read) Policy Check
| |
v v
Apply <----- Manual ApprovalTerraform Cloudへの接続(CLI-drivenやVCS連携の基礎)
terraform {
cloud {
organization = "nicheelab"
workspaces {
name = "platform-prod"
}
}
}
# terraform login でAPIトークンを設定し、CLI駆動のrunも可能現場での価値は“メトリクスで語る”と伝わります。MTTR短縮、手作業削減、環境展開時間の改善、ポリシー違反ゼロ件化などを定量的に示しましょう。
試験は公式ドキュメント中心に対策します。Associateは基本機能の正確さ、Professionalは設計判断の根拠とチーム運用の是非が問われます。
| 指標 | 例 | 面接での語り方 |
|---|---|---|
| 展開時間 | 手動1日→Terraformで30分 | 差分適用と並列化の設計意図を説明 |
| 変更失敗率 | 月5件→1件未満 | planレビューと段階適用の仕組み |
| 再利用率 | 社内module採用80% | 抽象化と入力検証の工夫 |
キャリアの見取り図(価値の翻訳)
[個人スキル] -> [チーム慣行] -> [組織標準]
| | |
(学習) (導入) (定着/監査)CIでの安全な実行例(fmt/validate/planの自動化)
name: terraform-ci
on: [pull_request]
jobs:
tf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: terraform fmt -check
- run: terraform init -input=false
- run: terraform validate
- run: terraform plan -input=false -out=tfplan
- name: Show Plan
run: terraform show -no-color tfplanAssociate / Pro
問題 1
同じ構成を開発/ステージング/本番で再利用しつつ、状態を安全に分離したい。Terraformに沿った方法として最も適切なのはどれか?
正解: B
状態はワークスペース単位で分離するのが安全で、VCS連携により同一モジュールの再利用と差分の可視化が可能です。単一ワークスペースでvarのみ切替(A)や同一stateキーの共有(D)は衝突/誤適用の原因になります。手動切替(C)はヒューマンエラーを招きやすく、チーム運用に不向きです。
Terraform未経験でもAssociate合格を目指せるか?
可能です。公式ドキュメントをベースに、小規模環境(VPCやVNet、ストレージ)を実際に作成・変更・破棄する反復練習を行いましょう。plan出力の読み解き、状態/バックエンド、モジュールの基本、Terraform Cloudの使い方までを確実に理解すると合格ラインに到達します。
Professionalを目指す前に押さえるべき実務経験は?
少なくとも1つのプロダクション環境で、モジュールのバージョニング運用、リモートステート&ロック、VCS/CIを用いたPR駆動の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を用いた既存リソース参照の基本、選択基準、評価順序、...