【AWS学習ログ③】CFnテンプレートの書き方と組み込み関数を整理してみた【CFn入門・後編】

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

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

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

📌 前回の記事はこちら 👉 【AWS学習ログ②】CloudFormationとは?IaCを始めたら世界が変わった話【CFn入門・前編】

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

前編では「CFnの概念・IaCとは何か・JSONとYAML」について話しました。後編となる今回は、「実際にどう書くの?(テンプレートの構文)」と「どうやってAWSに反映させるの?(スタックの操作)」を整理していきます!

最初は覚えることが多くて「ウッ…」となるかもしれませんが、「Resourcesだけ書けばどうにかなる!」と覚えれば大丈夫です(笑)


テンプレートの主要セクション

CFnテンプレートは、いくつかのブロック(セクション)に分かれています。

セクション役割必須?
AWSTemplateFormatVersionバージョン指定(2010-09-09で固定)任意
Parameters画面から入力させる「変数」を定義任意
Mappings環境ごとの設定値を「表」で定義任意
Resources作成するAWSリソースを定義✅ 必須
Outputs作成後のIDなどを出力・他スタックへ共有任意

ここがポイント! Resources 以外は全部オプション(任意)です! 極端な話、Resourcesさえ書いてあれば動きます。


各セクションの書き方イメージ

1. Parameters(変数の定義)

スタック作成時に、ポップアップ画面で値を入力させたい時に使います。

Parameters:
  EnvName:
    Type: String
    Default: dev
    AllowedValues: [dev, stg, prod]  # 選択肢を制限できる

2. Resources最重要!

ここが本体です。「何を作るか」を定義します。

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance      # リソースの種類(何を作る?)
    Properties:                   # 詳細設定(スペックは?)
      InstanceType: t3.micro
      ImageId: ami-0xxxxxxx

💡 Type に何を書けばいい? AWS公式リファレンス(https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)で調べながら書きます。全部覚える必要はありません!

3. Outputs(出力・共有)

作成されたリソースのID(VPC IDなど)を画面に表示したり、他のスタックに渡したりします。

Outputs:
  InstanceID:
    Value: !Ref MyEC2Instance
    Export:
      Name: My-EC2-ID   # 他のスタックからこの名前で呼び出せる

これだけは覚えよう!「組み込み関数」

テンプレート内では、値を動的に埋め込むための「関数」が使えます。!(ビックリマーク)で始まるのが特徴です。

よく使う関数 BEST 5

関数書き方用途
Ref!Ref 論理IDパラメータの値や、リソースのIDを取得する
GetAtt!GetAtt リソース.属性リソースの特定の属性値(DNS名など)を取得する
Sub!Sub "文字${変数}"文字列の中に変数を埋め込む
FindInMap!FindInMap [マップ名, キー...]Mappingsで定義した表から値を取り出す
ImportValue!ImportValue エクスポート名別のスタックでOutputされた値を読み込む

📚 AWS公式:組み込み関数リファレンス https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html

⚠️ !Ref!GetAtt の違いに注意

初心者が一番ハマるポイントです!

# !Ref → リソースの「メインのID」を返す
VpcId: !Ref MyVPC            # → VPC ID(vpc-xxxxxxxxx)が返る

# !GetAtt → ID以外の「詳細情報」を取りたい時
DnsName: !GetAtt MyEC2.PublicDnsName  # → パブリックDNS名が返る

覚え方!Ref で取れない情報は !GetAtt を探す」


スタックの操作(ライフサイクル)

1. スタックの作成(Create)

マネジメントコンソールにテンプレートをアップロードするだけでOKです。推奨はS3にファイルを置いて読み込ませる方法です。

📚 AWS公式:スタックの作成 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html

2. スタックの更新(Update)と「変更セット」

テンプレートを修正して再アップロードすると、リソースの設定を変更できます。この時、必ず「変更セット(Change Set)」を作成しましょう。

変更セットとは: 「これを実行すると、何が変わるか?」をプレビューする機能です。

⚠️ Replacement: True(置換)が出たら要注意! これは「リソースを一度削除して、作り直す」という意味です。 RDS(データベース)でこれが起きると、データが消えます。 必ず確認しましょう!

📚 AWS公式:変更セット https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html

3. スタックの削除(Delete)

スタックを削除すると、紐づくリソースも一括で削除されます。お片付けが超簡単です。

ただし、以下の場合はエラーで削除に失敗することがあります:

エラーパターン対処方法
S3バケットの中にファイルが残っているバケットを先に空にしてから実行
「削除保護」が有効になっているEC2やRDSの設定から削除保護を解除
他のスタックから参照されている!ImportValue している側のスタックを先に削除

💡 実機で試しながら学びたい方へ

CFnは「書いて、エラーが出て、直す」の繰り返しで身につきます。独学だと「何が間違っているか分からない…」という壁にぶつかりがちですが、スクールなら講師に質問しながら進められます。

【PR】▶ AWSが学べるスクールはこちら


手元にコードがないリソースをCFn化したい!

「手動で作っちゃったリソースを、後からコード管理したい…」そんな時に使える便利な機能があります。

IaCジェネレーター(2024年2月〜)

AWSの既存リソースをスキャンして、自動的にCFnテンプレートを生成してくれる機能です。

マネジメントコンソールでの使い方(3ステップ):

  1. CloudFormation コンソール → 左メニュー「IaCジェネレーター」をクリック
  2. 新しいスキャンを開始」でアカウント内のリソースをスキャン(1,000リソースで約10分)
  3. スキャン結果からテンプレート化したいリソースを選択 → 「テンプレートを作成

ゼロから書くのが辛い時は、まずこれで雛形を作るのがおすすめです!

⚠️ IaCジェネレーターの注意点(2025年時点)

  • 追加料金なしで利用できますが、スキャン回数に制限(クォータ)があります
  • すべてのリソースタイプに対応しているわけではありません
  • 生成されたテンプレートは手動修正が必要なケースもあります
  • 対応リソース一覧:https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html

📚 AWS公式:IaCジェネレーター https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/generate-IaC.html

リソースインポート

既存のリソースを、CFnスタックの管理下に取り込む機能です。「インポート用のテンプレート」を用意する必要がありますが、これを使えば作り直しなしでIaC化できます。

📚 AWS公式:リソースインポート https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import.html


まとめ

テーマ重要ポイント
テンプレート構造Resourcesだけが必須。他はすべて任意
組み込み関数!Ref(ID取得)と!GetAtt(属性取得)の使い分けが肝
スタックの更新変更セットでReplacement: True(データ消失リスク)を必ず確認
IaCジェネレーター既存リソースからテンプレートを自動生成。追加料金なし

CloudFormationが書けるようになると、インフラ構築のスピードと品質が劇的に上がります。最初はコピペからで良いので、ぜひチャレンジしてみてください!

次回は、AWSのセキュリティの要である「IAM(アイデンティティおよびアクセス管理)」について整理します。ルートユーザーとIAMユーザーの違いなど、基礎からしっかり学んでいきましょう!

皆さんにとって素敵な1日になりますように!


📚 参考:公式ドキュメント・信頼性の高い情報源

種別リンク
AWS公式:テンプレート構造https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/template-anatomy.html
AWS公式:リソースタイプリファレンスhttps://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
AWS公式:組み込み関数リファレンスhttps://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
AWS公式:変更セットhttps://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html
AWS公式:IaCジェネレーターhttps://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/generate-IaC.html
AWS公式:リソースインポートhttps://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import.html
DevelopersIO:IaCジェネレーター解説https://dev.classmethod.jp/articles/cloudformation-import-existing-resources/

コメントを残す

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

CAPTCHA