IaC

CloudFormation くらうどふぉーめーしょん

IaCスタックテンプレートAWSインフラ自動化YAML/JSON
CloudFormationについて教えて

簡単に言うとこんな感じ!

AWSのインフラを「設計書(テンプレートファイル)」に書いておくと、ボタン一発でサーバーやネットワークをまとめて自動で作ってくれるサービスだよ!毎回手でポチポチ設定しなくていいし、同じ環境を何度でも再現できるんだ。「インフラをコードで管理する」IaCの代表的な仕組みのひとつだよ。


CloudFormationとは

CloudFormationは、AWS(Amazon Web Services)が提供するInfrastructure as Code(IaC)サービスです。サーバー・ネットワーク・データベースといったAWSのリソースを、YAMLまたはJSON形式のテンプレートファイルに記述しておき、そのファイルをもとにインフラを自動的に構築・更新・削除できます。

従来、AWSのリソースを作るには管理コンソール(ブラウザ画面)で一つひとつ手作業で設定する必要がありました。CloudFormationを使うと、「どんなリソースをどんな設定で作るか」をファイルに定義するだけで、AWSが正しい順番でリソースを自動的に作成してくれます。これにより、手作業によるミスを減らし、開発・本番など複数の環境を同じ構成で揃えることが容易になります。

特にシステム発注や運用の立場では、「環境構築の手順がコードとして残る=仕様書になる」という点が大きなメリットです。担当者が変わっても構成を再現でき、変更履歴をGit等で管理できるため、ガバナンス(統制)強化にも役立ちます。


CloudFormationの核心:テンプレートとスタック

CloudFormationを理解するうえで欠かせない2つの概念がテンプレートスタックです。

概念説明例え
テンプレートインフラの構成を記述したYAML/JSONファイル建物の設計図・レシピ
スタックテンプレートをもとに実際に作られたリソースのまとまり設計図をもとに建てた建物そのもの

テンプレートを「実行(デプロイ)」するとスタックが作られ、その中にEC2インスタンス・VPC・RDSなど複数のリソースがまとめて管理されます。スタックを削除すれば、中のリソースもまとめて消せます。

テンプレートの基本構造

AWSTemplateFormatVersion: "2010-09-09"
Description: "サンプル:EC2インスタンスを1台作る"

Parameters:          # 実行時に外から値を渡せる変数
  InstanceType:
    Type: String
    Default: t3.micro

Resources:           # 作成するAWSリソースを定義(必須)
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId: ami-0abcdef1234567890

Outputs:             # 作成後に出力したい値(IPアドレスなど)
  InstanceId:
    Value: !Ref MyEC2Instance

主なセクションは以下の通りです。

セクション役割必須?
AWSTemplateFormatVersionテンプレート形式のバージョン任意
Descriptionテンプレートの説明文任意
Parameters実行時に外から渡せる変数任意
Resources作成するAWSリソースの定義必須
Outputsスタック作成後に出力する値任意

覚え方:「テンプレはレシピ、スタックは料理」

テンプレートはカレーのレシピ、スタックは実際に作ったカレーだと思うとわかりやすいです。同じレシピ(テンプレート)から、開発用・本番用と複数のカレー(スタック)を作れます。


歴史と背景

  • 2011年2月 — AWS CloudFormationが一般提供開始。当初はJSONのみ対応
  • 2013年頃 — AWSリソースの種類が急増し、手動での環境構築が限界に。IaCの重要性が業界で認識され始める
  • 2016年 — YAMLフォーマットのサポートを追加。JSONより読み書きしやすいYAMLが主流になる
  • 2018年AWS CDK(Cloud Development Kit)が登場。TypeScriptPythonなどのプログラミングコードからCloudFormationテンプレートを自動生成できるように
  • 2019年〜CloudFormation StackSetsが成熟し、複数のAWSアカウント・リージョンへの一括デプロイが容易になる
  • 2021年以降AWS CloudFormation Guard(テンプレートのポリシーチェックツール)など、ガバナンス強化ツールが充実。エンタープライズ利用が加速

類似サービス・ツールとの比較

CloudFormationと同様の「インフラをコードで管理する」ツールは複数あります。用途や環境によって使い分けが重要です。

ツール提供元対応クラウド特徴
CloudFormationAWSAWSのみAWSネイティブ。追加費用なし
AWS CDKAWSAWSのみプログラム言語でCFnテンプレートを生成
TerraformHashiCorpマルチクラウドAWS/Azure/GCPを統一的に管理可能
PulumiPulumi CorpマルチクラウドTypeScript等でインフラを記述
AWS SAMAWSAWSのみサーバーレス(Lambda等)特化のCFn拡張
CloudFormationとCDKの関係 AWS CDK TypeScript / Python等 Terraform マルチクラウド対応 AWS SAM サーバーレス特化 CloudFormation YAML / JSON テンプレート AWS リソース(スタック) EC2 / VPC / RDS / Lambda ...等

CDK・SAM・Terraformはいずれも最終的にCloudFormationテンプレートを生成するか、直接AWSリソースを操作します。AWSだけを使う場合はCloudFormationがベースになるケースが多いです。


関連する規格・RFC

※ CloudFormationはAWS独自のサービスであり、対応するIETF RFC・ISO・IEEE規格はありません。関連するオープン標準として下記が参考になります。

規格・仕様内容
CNCF TAG App Delivery - GitOps原則IaCを含むGitOpsの定義・原則(非RFC)

関連用語

  • IaC(Infrastructure as Code) — インフラをコードで定義・管理する考え方全般
  • AWS CDK — TypeScript等のプログラム言語でCloudFormationテンプレートを生成するAWSツール
  • Terraform — HashiCorp製のマルチクラウド対応IaCツール
  • スタック — CloudFormationでテンプレートから作られたリソースのまとまり
  • YAML — CloudFormationテンプレートの記述に使われる設定ファイル形式
  • EC2 — CloudFormationで管理する代表的なAWSの仮想サーバーサービス
  • DevOps — IaCを実践の中心に置く開発・運用統合の考え方
  • CI/CD — CloudFormationデプロイを自動化するパイプラインの仕組み