【AWS学習ログ②】CloudFormationとは?IaCを始めたら世界が変わった話【CFn入門・前編】

※本ページはプロモーションが含まれています

こんにちは!いつもブログを読んでいただき、ありがとうございます。

📌 現在進行中の学習ロードマップはこちら 👉 【AWS学習ログ①】未経験からクラウドエンジニアへ!私の学習ロードマップ

📌 次回の記事はこちら 👉 【AWS学習ログ③】CFnテンプレートの書き方と組み込み関数を整理してみた【CFn入門・後編】

📝 このブログは、プログラミングスクールでAWSを学んでいる私が、学んだ内容を自分の言葉でまとめた学習記録です。

今回は、ロードマップで予告していた「CloudFormation(CFn)」にいよいよ突入します!

最初は「インフラをコードで書く…?画面でポチポチした方が早くない?」と思っていました。でも、実際に学んでみて「これは世界が変わる便利さだ…!」と感動しました。

今回の前編では、以下の基礎知識をまとめます。

  • CloudFormation(CFn)とTerraformの違い
  • なぜインフラをコード化(IaC)するのか?
  • JSONとYAML、どっちを使うべき?

CloudFormation(CFn)って何?

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/


CFnとTerraformの違い

IaCを勉強し始めると、「Terraform」という名前も聞くと思います。どっちを勉強すべきか迷う方のために、違いを整理しました。

比較項目CloudFormation(CFn)Terraform
提供元AWS公式HashiCorp(※OpenTofuなど派生OSS あり)
対応クラウドAWSのみAWS・GCP・Azureなどマルチ対応
記述言語JSON または YAMLHCL(独自の宣言型言語)
状態管理(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が学べるスクールはこちら


JSONとYAMLって何?どう違うの?

CFnのテンプレートは、JSONまたはYAML形式で書きます。結論から言うと、実務ではYAMLが圧倒的に主流です。

特徴JSONYAML
可読性{}[]が多くて目がチカチカするインデント(字下げ)で構造が見やすい
コメント❌ 書けない#で書ける(最大のメリット!)
注意点カンマ忘れなどのエラーが出やすいインデント(スペース)の数が厳格

実際の書き方を見てみよう

▼ 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 TerraformAWS特化ならCFn(状態管理が自動で楽)、マルチクラウドならTerraform
IaC のメリットオペミス削減・コピーで量産・Gitで履歴管理・コードが仕様書になる
JSON vs YAMLCFnは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/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA