Infrastructure as Code(IaC)
クラウドインフラの構築・管理を手動操作ではなくコードで定義・自動化するアプローチを学びます。AWS CloudFormation、CDK、SAMを中心に、再現可能で安全なインフラ管理手法を解説します。
所要時間
約45分
学べること
- IaCの概念と手動運用との違い
- CloudFormationテンプレートの構造と組み込み関数
- スタック間参照とNested Stacks
- AWS CDKによるプログラマティックなインフラ定義
- CDKコンストラクトレベル(L1/L2/L3)の使い分け
- SAMによるサーバーレスインフラ定義
- CloudFormation/CDK/Terraformの比較と選定基準
前提知識
- AWSの基本サービス(VPC、EC2、RDS等)の理解
- YAML/JSONの基本構文
- プログラミングの基本知識(CDKセクション向け)
目次
- IaCの概要と必要性
- AWS CloudFormation概要
- CloudFormationテンプレートの構造
- CloudFormation組み込み関数
- スタック間の参照
- AWS CDK(Cloud Development Kit)
- CDKのコンストラクトレベル
- CDKコード例
- SAM(Serverless Application Model)
- IaCツール比較
- IDサービスでの活用
- まとめ
IaCの概要と必要性
Infrastructure as Code(IaC)は、サーバー、ネットワーク、データベースなどのインフラをコード(テンプレートファイル)として定義し、バージョン管理・自動デプロイする手法です。
手動運用の課題
手動運用の世界:
開発者A ──→ AWSコンソール ──→ 本番環境
│ (手動クリック) │
│ ├─ VPC作成(設定忘れ?)
│ ├─ SG設定(ポート開けすぎ?)
│ └─ RDS作成(パラメータ違う?)
│
開発者B ──→ AWSコンソール ──→ ステージング環境
(手動クリック) │
├─ VPC作成(本番と設定が違う)
├─ SG設定(本番と不整合)
└─ RDS作成(バージョン違い)
→ 環境差異、再現不可能、監査困難
手動運用 vs IaC 比較
| 観点 | 手動運用 | IaC |
|---|---|---|
| 再現性 | 手順書依存、人的ミスが発生 | コードで完全再現可能 |
| バージョン管理 | スクリーンショットや手順書 | Gitで変更履歴を管理 |
| レビュー | 作業後の目視確認 | Pull Requestで事前レビュー |
| 環境差異 | 環境ごとに微妙な違いが蓄積 | 同一テンプレートで統一 |
| 監査 | 操作ログの後追い確認 | コード差分で変更内容を把握 |
| スケール | 環境数に比例して工数増大 | パラメータ変更で複数環境に展開 |
| 障害復旧 | 手順を再実行(時間がかかる) | テンプレートから即座に再構築 |
| ドリフト検知 | 気づきにくい | 自動検知可能 |
AWS CloudFormation概要
CloudFormationはAWSネイティブのIaCサービスです。テンプレートファイルからAWSリソースを自動的にプロビジョニングします。
主要概念
+------------------+
| テンプレート | ← YAML/JSONファイル(インフラの設計図)
+--------+---------+
|
v
+------------------+
| スタック | ← テンプレートから生成されるリソース群
| +-------------+ |
| | VPC | |
| | Subnet | |
| | EC2 | |
| | RDS | |
| +-------------+ |
+--------+---------+
|
v
+------------------+
| 変更セット | ← スタック更新前の差分プレビュー
| - Subnet追加 |
| - EC2タイプ変更 |
| - RDS変更なし |
+------------------+
- テンプレート: インフラの宣言的定義(YAML/JSON形式)
- スタック: テンプレートからデプロイされたリソースの集合。スタック単位で作成・更新・削除を管理
- 変更セット(Change Set): スタック更新前に変更内容をプレビューする仕組み。意図しない変更を防止