【あいえーしー】

IaC(Infrastructure as Code) とは?

💡 インフラ構築を「手作業」から「コード」に変える
📌 このページのポイント
手動管理 vs Infrastructure as Code 手動管理 コンソール 手動クリック操作 SSH接続 直接設定変更 構成ドリフト発生 環境ごとに差異が蓄積 再現不可 手順書が 古い 属人化 担当者 依存 監査困難 変更履歴 なし IaC管理 コード (Git) Terraform / CDK 自動適用 plan → apply 再現可能 同一環境を構築 メリット ✓ バージョン管理 ✓ コードレビュー ✓ 変更履歴追跡 ✓ テスト可能 ✓ チーム共有 ✓ ロールバック ✓ 冪等性
Infrastructure as Codeの考え方
ひよこ ひよこ

なんで手動設定じゃダメなの?

ペンギン先生 ペンギン先生

手動だと①手順を覚えている人しかできない(属人化)、②「本番と開発で設定が微妙に違う」問題が起きる、③変更履歴が残らない、④同じ環境を再現できない。IaCなら「このコードを実行すれば必ず同じ環境ができる」が保証されるんだよ

ひよこ ひよこ

Terraformってどんなもの?

ペンギン先生 ペンギン先生

HashiCorp社のIaCツールで、AWSGCPAzureなどマルチクラウドに対応しているよ。HCL(HashiCorp Configuration Language)という独自言語でインフラを宣言的に記述する。「terraform plan」で変更計画を確認、「terraform apply」で実行。インフラのPRレビューができるのが革命的だね

ひよこ ひよこ

宣言的と命令的の違いは?

ペンギン先生 ペンギン先生

宣言的は「こういう状態にしてほしい」(TerraformCloudFormation)、命令的は「この手順で構築して」(Ansibleシェルスクリプト)。宣言的の方が冪等性(何度実行しても同じ結果)が保証しやすい。「サーバー3台」と宣言すれば、現在1台なら2台追加、4台なら1台削除してくれるよ

ひよこ ひよこ

IaCの注意点は?

ペンギン先生 ペンギン先生

①stateファイル(現在のインフラ状態)の管理が重要(S3+DynamoDBでリモート管理推奨)、②手動変更との併存は危険(ドリフト検出が必要)、③シークレット(パスワード等)をコードに含めない(Vault等を使う)、④モジュール化で再利用性を高める。最初は学習コストが高いけど、長期的には圧倒的に楽になるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「IaC」って出てきたら「インフラをコードで定義して自動構築する手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Infrastructure as Code」 = コードとしてのインフラ
💬 Infrastructure(インフラ)をCode(コード)として扱うことで、ソフトウェア開発のベストプラクティスをインフラにも適用するよ
← 用語集にもどる