
こんにちは!いつもブログを読んでいただき、ありがとうございます。
📌 現在進行中の学習ロードマップはこちら 👉 【AWS学習ログ①】未経験からクラウドエンジニアへ!私の学習ロードマップ
📌 次回の記事はこちら 👉 【AWS学習ログ③】CFnテンプレートの書き方と組み込み関数を整理してみた【CFn入門・後編】
📝 このブログは、プログラミングスクールでAWSを学んでいる私が、学んだ内容を自分の言葉でまとめた学習記録です。
今回は、ロードマップで予告していた「CloudFormation(CFn)」にいよいよ突入します!
最初は「インフラをコードで書く…?画面でポチポチした方が早くない?」と思っていました。でも、実際に学んでみて「これは世界が変わる便利さだ…!」と感動しました。
今回の前編では、以下の基礎知識をまとめます。
- CloudFormation(CFn)とTerraformの違い
- なぜインフラをコード化(IaC)するのか?
- JSONとYAML、どっちを使うべき?
AWS CloudFormationは、AWSのリソース(EC2やVPCなど)を「テキストファイル(テンプレート)」に定義して、それを読み込ませるだけで自動的に構築してくれるサービスです。
これを専門用語でIaC(Infrastructure as Code=インフラのコード化)と呼びます。

料金について
AWS CloudFormation に関して別途料金が発生することはありません。支払いの対象となるのは CloudFormation を使用して作成した AWS リソース(例: Amazon EC2 インスタンス、Elastic Load Balancing ロードバランサーなど)であり、手動で作成した場合に相当する料金が発生します。
つまり、CFn自体の利用は無料! 作られたEC2やRDSなどのリソース代だけ払えばOKです。
⚠️ 補足(サードパーティリソースを使う場合) AWS以外のサードパーティ製リソースをCFnで管理する場合は、ハンドラーオペレーションごとに料金が発生します。ただし、通常の学習や業務でAWSリソースだけを使う範囲では無料です。 参考:https://aws.amazon.com/jp/cloudformation/pricing/
IaCを勉強し始めると、「Terraform」という名前も聞くと思います。どっちを勉強すべきか迷う方のために、違いを整理しました。
| 比較項目 | CloudFormation(CFn) | Terraform |
|---|---|---|
| 提供元 | AWS公式 | HashiCorp(※OpenTofuなど派生OSS あり) |
| 対応クラウド | AWSのみ | AWS・GCP・Azureなどマルチ対応 |
| 記述言語 | JSON または YAML | HCL(独自の宣言型言語) |
| 状態管理(State) | AWSが自動管理 | 自分で tfstate ファイルを管理が必要 |
| サポート | AWSサポートに相談可 | 公式サポート対象外(コミュニティ頼み) |
| コードの安定性 | 長期間変わらず安定 | バージョンで書き方が変わることがある |
💡 どっちを選ぶべき?
- AWSだけを使うなら → CFn(公式サポートがあり、状態管理が自動で楽)
- 複数のクラウドを使うなら → Terraform(同じ書き方で他社クラウドも管理できる)
私はまずAWSを深く理解したいので、公式のCFnで学習することにしました!
📝 OpenTofuとは? 2023年にHashiCorpがTerraformのライセンスを商用制限のあるBSL(Business Source License)に変更したことを受け、コミュニティがフォーク(分岐)して作ったOSSがOpenTofuです。GitHubで活発に開発が続いており、Terraformの互換性を保ちながら完全オープンソースで利用できます。
「手作業の方が直感的で楽じゃん」と思っていた過去の自分に教えたい、IaCのメリット・デメリットです。
✅ コード化のメリット
① オペミス(操作ミス)が激減する 手作業だと起こりがちな「クリックミス」「設定漏れ」がなくなります。コード通りにしか作られないからです。
② 「コピー」で量産できる 一度テンプレートを作れば、本番環境(prod)・検証環境(stg)・開発環境(dev)を全く同じ構成で瞬時に作成できます。
③ Gitで履歴管理できる 「いつ・誰が・何を変えたか」が全部残ります。間違えたら、Gitの機能で過去の状態に戻すことも簡単です。
④ コード自体が仕様書になる 「今の設定値どうなってる?」と確認する時、Excelの管理表を見る必要はありません。最新のコードを見ればそれが正解です。
⚠️ コード化のデメリット(正直な感想)
① 学習コストがかかる YAMLの書き方やお作法を覚えるまでは、手作業より時間がかかります。
② 「ちょっと手直し」が厳禁になる コードで管理しているものをマネジメントコンソールで手動変更してしまうと、コードと実態がズレてしまいます(これをドリフトと呼びます)。一度IaCを始めたら、コードで更新し続ける覚悟が必要です。
③ 最初の設計が重要 テンプレートの構造を後から大きく変えるのはコストが高いため、最初の設計を慎重に行う必要があります。
💡 手を動かしながら学びたい方へ
IaCは「習うより慣れろ」の世界です。実際にエラーを出して修正する過程で理解が深まりますが、独学だと環境構築で詰まりがちです。スクールなら体系的なカリキュラムで効率よく学べますよ。
【PR】▶ 【リンク挿入②】AWSが学べるスクールはこちら
![]()
![]()
CFnのテンプレートは、JSONまたはYAML形式で書きます。結論から言うと、実務ではYAMLが圧倒的に主流です。
| 特徴 | JSON | YAML |
|---|---|---|
| 可読性 | {}や[]が多くて目がチカチカする | インデント(字下げ)で構造が見やすい |
| コメント | ❌ 書けない | ✅ #で書ける(最大のメリット!) |
| 注意点 | カンマ忘れなどのエラーが出やすい | インデント(スペース)の数が厳格 |
実際の書き方を見てみよう
▼ JSON形式
{
"Resources": {
"MyEC2": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t3.micro"
}
}
}
}
※JSONはコメントが書けません!
▼ YAML形式(おすすめ!)
Resources:
MyEC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro # ここでインスタンスタイプを指定
YAMLの方がスッキリしていて、コメントも書けるので分かりやすいですよね。
⚠️ YAMLあるある注意点 「インデント(行頭のスペース)はスペース2個」が業界標準のルールです。 タブ(Tabキー)を使うとエラーになることがあるので注意しましょう!
Linuxでの変換テクニック(おまけ)
実務では、JSON形式のファイルをYAMLに変換したい時があります。そんな時はコマンドラインツールを使うと便利です。
# JSONを見やすく整形する(jqコマンド)
cat template.json | jq .
# JSONをYAMLに変換する(yqコマンド v4以降)
yq -o=yaml template.json
# YAMLをJSONに変換する(yqコマンド v4以降)
yq -o=json template.yaml
⚠️ yqコマンドの注意点
yqはバージョン3とバージョン4でコマンドの書き方が大きく変わります。 まずyq --versionでバージョンを確認してから使いましょう!
まとめ
| テーマ | ポイント |
|---|---|
| CFnとは | AWS公式のIaCサービス。テンプレートをもとにAWSリソースを自動構築 |
| CFn vs Terraform | AWS特化ならCFn(状態管理が自動で楽)、マルチクラウドならTerraform |
| IaC のメリット | オペミス削減・コピーで量産・Gitで履歴管理・コードが仕様書になる |
| JSON vs YAML | CFnはYAMLが主流。コメントが書ける・見やすい。インデントは2スペース厳守 |
次回の**【後編】**では、実際のテンプレートの書き方(Resources・Parameters・Outputsなどのセクション解説)や、便利な「組み込み関数」についてまとめます。お楽しみに!
皆さんにとって素敵な1日になりますように!
📚 参考:公式ドキュメント・信頼性の高い情報源
| 種別 | リンク |
|---|---|
| AWS公式:CloudFormationとは | https://aws.amazon.com/jp/cloudformation/ |
| AWS公式:料金ページ | https://aws.amazon.com/jp/cloudformation/pricing/ |
| AWS公式:テンプレートの概要 | https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stack-templates-overview.html |
| AWS公式:サンプルテンプレート | https://aws.amazon.com/jp/cloudformation/resources/templates/ |
| DevelopersIO:Git Sync解説 | https://dev.classmethod.jp/articles/cloudformation-git-sync-update/ |