🎉

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コンソールから作成

  1. CloudFormation管理画面にアクセス
  2. テンプレートをアップロード(もしくはS3 URL指定)
  3. スタック名を入力し、パラメータを設定
  4. 実行 → 数分で構築完了

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を書く

CDKTerraformはより柔軟なロジックや抽象化が可能ですが、CloudFormationはAWSネイティブで完全にマネージドという強みがあります。


💡 まとめ:CloudFormationを活用するメリット

  • ✅ 手作業をなくして再現性の高い構成管理
  • ✅ 開発と本番の差異を最小限に
  • ✅ チームでの共有・レビューが可能
  • ✅ バージョン管理によるトレーサビリティ確保

📚 学びを深めるためのリソース


次回予告:
CloudFormationとTerraformのハイブリッド活用や、CI/CDパイプラインとの連携方法も紹介予定です!


ご希望があれば、CloudFormationテンプレート例やGUIの設定手順書なども添えられます。必要でしたらお知らせください。

Discussion