0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS CloudFormation】構造・主要セクション・組み込み関数・用語の整理シート(SAA対策)

0
Posted at

概要

AWS Solutions Architect - Associate (SAA) 対策や実務において、CloudFormationの用語や構造(セクション、プロパティ、組み込み関数)で混乱しやすかったポイントを論理的に整理したまとめノートです。

プログラミングの「変数」や「キー・バリュー」の概念、直感的な比喩(注文書モデル)を用いてメンタルモデルを構築しています。


1. テンプレートを構成する主要セクション(大見出し)

指示書(YAML)の一番左端に定義する「何を作るか・どう扱うか」のトップレベルセクションです。

セクション 役割 注文書のイメージ
Resources 【必須】何を作るか を定義する メインの商品名
(例:S3バケット、EC2インスタンス)
Parameters 作成時に外部から指定する設定値 を定義する オプション選択
(例:インスタンスタイプを t3.micro にする等、実行時に決める値)
Outputs 作成された結果を出力・共有する 場所 領収書・完了通知
(例:完成したS3バケット名やEC2のIPアドレス)

2. セクション内で使用される要素(プロパティ)

主に各セクションの中でリソースの挙動や関係性を定義する設定項目です。

  • Export
    • 役割: Outputs セクションで出力した結果に対し、外部公開マークを付与する設定。他のテンプレートから参照できる状態にする。
    • イメージ: 「他の指示書でもこの値を使っていいよ」という公開マーク。
  • DependsOn
    • 役割: リソースの作成順序を明示的に制御する。
    • イメージ: 「VPCが完成してからEC2を構築する」といった依存関係の指定。
  • DeletionPolicy
    • 役割: スタック(テンプレート)を削除した際、そのリソースをどう処理するか指定する。
    • イメージ: DeletionPolicy: Retain と書くと、スタックを削除してもS3バケットやRDSだけは消さずに残すことができる(誤削除防止)。

3. 主要な組み込み関数(データ取得・操作)

① Ref(レフ)

用途は大きく分けて2パターンあります。

  • パターンA: Resources セクションで定義したリソース関連の値を呼び出す
  • パターンB: Parameters セクションで明示的に指定した値を呼び出す(変数的な使い方)

【深掘り】パターンAの仕組み(論理名と物理名)

  1. 論理名の定義(ユーザー側)
    テンプレート作成時点では、本物のリソース名やID(物理名)はまだ決まっていないため、ユーザーが仮の名前(論理名 / キー)を定義する。
  2. 物理値の割り当て(AWS側)
    テンプレートを実行(デプロイ)した際、AWS側がリソースを実際に作成し、本物の名前やID(物理名 / バリュー)をその論理名に紐付ける。
  3. Refによる参照
    !Ref は、ユーザーが定義した「論理名(キー)」を指定することで、AWSが割り当てた 「本物の名前やID(バリュー)」を取り出して呼び出す仕組み。
Resources:
  # ① 論理名(キー)を定義(S3バケットの作成)
  MyBucket:  # ← 変数名(キー)のようなもの
    Type: AWS::S3::Bucket

  # ② 論理名を参照する(Refで呼び出す)
  MyPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref MyBucket  # ← 「MyBucket の本物の値(バリュー)を入れる!」=変数呼び出

② その他の主要組み込み関数

  • ImportValue
    • 役割: 別のテンプレートで Export された値を読み込み、自分のテンプレート上で利用する命令。
    • イメージ: 他の指示書が公開しているメモを読み取る。
  • Fn::GetAtt (!GetAtt)
    • 役割: Ref では取得できない、リソースの特定属性(例:S3のARN、EC2のプライベートIPなど)をピンポイントで取得する。
  • Fn::Sub (!Sub)
    • 役割: 文字列の中に変数(${MyBucket} など)を埋め込む。
  • Fn::Join (!Join)
    • 役割: 指定した区切り文字を使って、複数の文字列を結合する。

4. その他重要な仕組み・機能

ドリフト検出(Drift Detection)

  • 役割: テンプレートからスタックを作成後、誰かがマネジメントコンソール等から手動でパラメータ変更を行った場合に生じる**「テンプレートのコードと、実際のAWS設定のギャップ(ズレ)」**を検出する機能。

ヘルパースクリプト(cfn-init など)

  • 役割: EC2インスタンスが起動した直後に、ミドルウェア(Webサーバー等)のインストールや初期セットアップを自動実行する仕組み。
  • 詳細メカニズム:
    • コマンドの核となるのは cfn-init などのプログラム(CloudFormationで構築するEC2に標準で含まれるツール群)。
    • テンプレートの Metadata セクションに初期セットアップ内容(パッケージやファイル構成)を記述。
    • UserData から cfn-init コマンドを呼び出すことで、Metadata に記載した設計図通りの初期セットアップが自動実行される。
    • やっていることはEC2の「ユーザーデータ」機能に近いが、構成管理として綺麗に構造化して書けるメリットがある。

5. まとめ:理解を上げるコツ

理解度を上げるポイントは、構文を暗記することではなく 「何をしたい時に、どの要素を使うべきか」という要件とのマッチング を把握することだと感じました。

  • 値の受け渡し・出力: Parameters(入力) / Outputs + Export ➔ ImportValue(外部共有)
  • 属性の取得・参照: !Ref(名前やIDの基本参照) / !GetAtt(ARNやIPなど特定の属性取得)
  • 順序と保護: DependsOn(作成順制御) / DeletionPolicy(スタック削除時のリソース保護)
  • 構成と運用: Drift Detection(設定のズレ検出) / Metadata + cfn-init(EC2初期セットアップの構造化)

単なる用語暗記ではなく、こうした「役割の関係性」やイメージ(メンタルモデル)を整理しておくと、SAAの試験問題や実務のコードを読む際にも頭に入りやすくなると思います。同じくSAA合格を目指して学習中の方の参考になれば幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?