AWSのインフラをコードで管理する「IaC(Infrastructure as Code)」を始めようとしたとき、多くのエンジニアが最初に悩むのが「TerraformとCloudFormation、どっちを使えばいいの?」という問題です。
この記事では、両方を実際に使った経験をもとに、それぞれの特徴・メリット・デメリットをわかりやすく比較します。
そもそもIaCとは?
IaC(Infrastructure as Code)とは、サーバーやネットワークなどのインフラ構成をコードで定義・管理する手法です。
手動でAWSコンソールをポチポチ操作する代わりに、コードを実行するだけで同じ環境を自動で構築できます。
IaCのメリット:
- 同じ環境を何度でも再現できる
- 変更履歴をGitで管理できる
- ヒューマンエラーを減らせる
- チームで設定を共有しやすい
TerraformとCloudFormationの基本
Terraform
HashiCorp社が開発したオープンソースのIaCツール。AWS・Azure・GCPなど複数のクラウドに対応しており、HCL(HashiCorp Configuration Language)という独自言語でインフラを定義します。
AWS CloudFormation
AWSが提供する純正のIaCサービス。YAMLまたはJSON形式でテンプレートを作成し、AWSリソースを管理します。AWSに特化しており、新しいAWSサービスへの対応が早いのが特徴です。
5つの観点で徹底比較
1. 対応クラウド
| Terraform | CloudFormation | |
|---|---|---|
| AWS | ✅ | ✅ |
| Azure | ✅ | ❌ |
| GCP | ✅ | ❌ |
| その他クラウド | ✅ | ❌ |
Terraformの圧勝。 マルチクラウド環境やAWS以外のサービスも管理したい場合はTerraform一択です。AWSのみを使う場合はどちらでも問題ありません。
2. 記述言語・構文
Terraform(HCL)の例:
hcl
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
CloudFormation(YAML)の例:
yaml
Resources:
WebServer:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0c55b159cbfafe1f0
InstanceType: t2.micro
Tags:
- Key: Name
Value: WebServer
Terraformの方がシンプルで読みやすい印象です。CloudFormationはYAMLの構造が深くなりやすく、慣れるまで少し時間がかかります。
3. 学習コスト
| Terraform | CloudFormation | |
|---|---|---|
| 初期学習コスト | 中 | 中〜高 |
| ドキュメントの充実度 | ◎ | ◎ |
| 日本語情報量 | ○ | ○ |
| エラーのわかりやすさ | ○ | △ |
CloudFormationはエラーメッセージがわかりにくいことがあります。Terraformはterraform planコマンドで変更内容を事前に確認できるため、初心者にも比較的安心して使えます。
4. 状態管理
Terraform: terraform.tfstateというファイルで現在のインフラの状態を管理します。チームで使う場合はS3などのリモートバックエンドに保存するのが一般的です。
CloudFormation: 状態管理はAWSが自動で行います。スタックという単位でリソースをグループ管理するため、状態ファイルの管理が不要です。
この点ではCloudFormationの方が管理が楽です。Terraformの状態ファイルは適切に管理しないとトラブルの原因になることがあります。
5. AWSサービスへの対応速度
新しいAWSサービスが発表されたとき、CloudFormationは純正サービスのため対応が速い傾向があります。Terraformはコミュニティや公式プロバイダーのアップデートを待つ必要があり、対応が数週間〜数ヶ月遅れることがあります。
新しいAWSサービスをすぐ使いたい場合はCloudFormationが有利です。
総合比較表
| 比較項目 | Terraform | CloudFormation |
|---|---|---|
| マルチクラウド対応 | ✅ 対応 | ❌ AWSのみ |
| 構文のシンプルさ | ◎ HCL | ○ YAML/JSON |
| 事前変更確認 | ✅ terraform plan | ✅ チェンジセット |
| 状態管理 | 自己管理が必要 | AWSが自動管理 |
| 新サービス対応速度 | △ 遅れることあり | ◎ 最速 |
| コスト | 無料(Terraform Cloud は有料プランあり) | 無料 |
| コミュニティ規模 | ◎ 非常に大きい | ○ 大きい |
| マルチクラウド案件 | ◎ 最適 | ❌ 不向き |
結局どっちを選べばいい?
Terraformをおすすめする場合
- 複数のクラウドを使っている(AWS + GCP、AWS + Azureなど)
- コードのシンプルさを重視する
- OSSコミュニティの豊富なモジュールを活用したい
- キャリアの幅を広げたい(Terraformスキルはどのクラウドでも使える)
CloudFormationをおすすめする場合
- AWSのみを使うと決まっている
- 新しいAWSサービスをすぐに使いたい
- 状態ファイルの管理をしたくない
- AWSのサービスと深く統合したい(AWS CDKなど)
実際に使ってみた感想
実務でTerraformを使ってVPCやEC2、RDSなどのインフラを構築しましたが、terraform planで変更内容を事前確認できる点がとても便利でした。「意図しない変更が起きそう」とすぐわかるので安心感があります。
一方CloudFormationはAWSコンソールとの親和性が高く、スタックの状態がAWS上で一目で確認できるのが良い点です。
どちらも一度は触ってみることをおすすめします。基本的な考え方は同じなので、一方を覚えればもう一方の習得も早くなります。
まとめ
- マルチクラウド・将来の汎用性 → Terraform
- AWS専用・管理が楽 → CloudFormation
- どちらも無料で始められる
- IaCの概念自体はどちらも同じなので両方覚えて損なし
IaCを導入するだけでインフラ管理の効率が大幅に上がります。まずはどちらか一方から試してみてください。
※ 筆者はTerraformを使ってVPC・EC2・RDS・WAF・CloudFrontなどのAWSインフラを実際に構築した経験があります。

コメント