AWS CloudFormation完全ガイド:インフラをコードで管理する力とは?
こんにちは、中野哲平です。 よく業務でAWS CloudFormationを使うので、ちょっとまとめてみました。
本記事では、AWSのインフラ構築・管理ツールの中でも特に注目される AWS CloudFormation(クラウドフォーメーション) について、実務で使える知識を網羅的に紹介します。
✅ CloudFormationとは?
AWS CloudFormation は、AWSリソース(EC2、S3、VPC、IAMなど)の構築や設定、依存関係の管理を YAMLまたはJSON形式のテンプレート で記述し、自動でプロビジョニングするサービスです。
いわば「インフラのコード化(IaC: Infrastructure as Code)」を実現するための代表的な仕組みです。
特徴
- 宣言的にインフラ構成を書く(何を構築するかを記述)
- スタックという単位でリソースをまとめて管理
- 繰り返し再現可能な環境の構築が可能
- 依存関係の自動解決が可能(例:VPCができてからEC2を起動)
🧩 なぜCloudFormationを使うのか?
従来の手作業 | CloudFormationによるIaC |
---|---|
手作業で構築するたびにミスが出やすい | 同じテンプレートから確実に再現可能 |
作業の属人化(担当者しかわからない) | テンプレート共有でチーム全体で可視化 |
作業履歴が残らない | テンプレートのバージョン管理(Git連携可) |
例えば、開発・ステージング・本番の各環境をテンプレートから構築することで、環境差異による不具合を防げます。
📜 基本構成:CloudFormationテンプレートの中身
CloudFormationテンプレートは大きく以下の5つで構成されます:
AWSTemplateFormatVersion: '2010-09-09'
Description: "S3バケットを作成するサンプルテンプレート"
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-sample-bucket-202504
主なセクション
セクション | 説明 |
---|---|
AWSTemplateFormatVersion |
テンプレートのバージョン |
Description |
テンプレートの概要説明 |
Resources |
作成するAWSリソース |
Parameters |
外部から与える値(例:インスタンスタイプなど) |
Outputs |
テンプレート実行後に表示する情報(例:VPC IDなど) |
🚀 スタックの作成方法
テンプレートを用いてCloudFormationの**スタック(Stack)**を作成する方法は2つあります。
1. AWSコンソールから作成
- CloudFormation管理画面にアクセス
- テンプレートをアップロード(もしくはS3 URL指定)
- スタック名を入力し、パラメータを設定
- 実行 → 数分で構築完了
2. AWS CLIを使って作成
aws cloudformation create-stack \
--stack-name my-s3-stack \
--template-body file://s3-template.yaml
🧠 よく使うユースケース
✅ ① 開発・ステージング・本番環境の一元管理
テンプレートを使えば、同じコードで3つの環境を再現可能。
✅ ② 複雑な依存構成の管理(VPC → EC2 → IAM Role)
依存関係を自動的に解決してくれるので、順番に悩む必要なし。
✅ ③ マルチリージョン展開
テンプレートを別リージョンに流すだけで、同じ構成が即座に展開可能。
🛠️ 高度な機能
🔁 1. 変更セット(Change Sets)
スタックを変更する前に「どのリソースがどう変わるか」をプレビューできる安全機能。
aws cloudformation create-change-set \
--stack-name my-stack \
--template-body file://updated-template.yaml \
--change-set-name my-changeset
🔄 2. スタック更新(UpdateStack)
コードの変更によって、既存のインフラを安全に差分更新可能。
🧪 3. テンプレートの検証
YAML/JSON構文に誤りがないかを事前に検証。
aws cloudformation validate-template \
--template-body file://template.yaml
⚠️ 注意点と落とし穴
リスク | 対策 |
---|---|
リソース削除時の依存破壊 |
DeletionPolicy: Retain を使う |
誤って更新→本番障害 |
Change Sets でプレビュー必須 |
テンプレート肥大化 | モジュール化(nested stack)を検討 |
デバッグが難しい |
Events タブや Stack Drift で原因特定 |
📦 CloudFormation vs 他のIaCツール
ツール | 特徴 |
---|---|
CloudFormation | AWS公式・信頼性高・テンプレート型 |
Terraform | マルチクラウド対応・学習コストやや高 |
AWS CDK | TypeScript/PythonなどでIaCを書く |
CDKやTerraformはより柔軟なロジックや抽象化が可能ですが、CloudFormationはAWSネイティブで完全にマネージドという強みがあります。
💡 まとめ:CloudFormationを活用するメリット
- ✅ 手作業をなくして再現性の高い構成管理
- ✅ 開発と本番の差異を最小限に
- ✅ チームでの共有・レビューが可能
- ✅ バージョン管理によるトレーサビリティ確保
📚 学びを深めるためのリソース
- AWS公式 CloudFormation 入門
- GitHubのサンプルテンプレート集
- AWS CloudFormation Designer(ビジュアルでテンプレート編集)
次回予告:
CloudFormationとTerraformのハイブリッド活用や、CI/CDパイプラインとの連携方法も紹介予定です!
ご希望があれば、CloudFormationテンプレート例やGUIの設定手順書なども添えられます。必要でしたらお知らせください。
Discussion