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)が登場。TypeScript・PythonなどのプログラミングコードからCloudFormationテンプレートを自動生成できるように
- 2019年〜 — CloudFormation StackSetsが成熟し、複数のAWSアカウント・リージョンへの一括デプロイが容易になる
- 2021年以降 — AWS CloudFormation Guard(テンプレートのポリシーチェックツール)など、ガバナンス強化ツールが充実。エンタープライズ利用が加速
類似サービス・ツールとの比較
CloudFormationと同様の「インフラをコードで管理する」ツールは複数あります。用途や環境によって使い分けが重要です。
| ツール | 提供元 | 対応クラウド | 特徴 |
|---|---|---|---|
| CloudFormation | AWS | AWSのみ | AWSネイティブ。追加費用なし |
| AWS CDK | AWS | AWSのみ | プログラム言語でCFnテンプレートを生成 |
| Terraform | HashiCorp | マルチクラウド | AWS/Azure/GCPを統一的に管理可能 |
| Pulumi | Pulumi Corp | マルチクラウド | TypeScript等でインフラを記述 |
| AWS SAM | AWS | AWSのみ | サーバーレス(Lambda等)特化のCFn拡張 |
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デプロイを自動化するパイプラインの仕組み