0
3

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】基礎をまとめてみた

0
Last updated at Posted at 2026-04-13

はじめに

今回はAWSインフラ構築のコード化(IaC)にかかせない、AWS CloudFormationの基礎についてまとめてみました。
少しでもご参考になれば幸いです。

CloudFormationとは

AWS CloudFormationは、AWSのリソース(EC2、S3、VPCなど)をコードで定義して自動構築・管理するサービスです。
AWSコンソール上でリソースを手動で管理する必要がなくなるため、ヒューマンエラー削減や再利用性が向上といったメリットがあります。

よく出る単語

テンプレート
・JSONまたはYAMLでリソース構成を定義したドキュメントのことを指します。

スタック
・テンプレートから実際に作られたリソースの集合のことを指します。

処理の流れ

YAMLを書く
   ↓
CloudFormationに送信する
   ↓
(CloudFormationが)内部でJSON化 + 構文チェック
   ↓
(CloudFormationが)スタックを作成(スタック単位で管理)
   ↓
(CloudFormationが)リソース依存関係の解決・作成順序の決定
   ↓
(CloudFormationが)各AWSサービスにAPIコール
   ↓
リソース作成完了
   ↓(必要に応じて)
YAMLを修正する
   ↓
CloudFormationに送信して更新する
   ↓(不要になったら)
リソースを削除する

YAMLの記述方式

※実務では可読性・記述量の少なさといった点からYAMLが主流のため、今回はYAMLで記述しています。

Key:<半角スペース>Value

・キーとバリューの組み合わせでデータを表現します
・半角スペースが必要です
・Valueのデータ型には[文字列・数値・ブール値]が入ります
・インデントでデータの構造を表現します
#を使用してコメントを書くことができます(JSONだとできない

セクション

Resources

・唯一の必須項目です
・AWSリソース郡を定義します

Parameters

・実行時に渡す変数値を定義します
・実行者によって値を変えたい場合などに使います

Mappings

・環境によって変わる値をMap形式で定義します
・リージョンによって変わるAMIなどを定義しておきます

Metadata

・パラメータのグルーピングに使用します

Conditions

・条件式の結果(true/false)に応じてリソースの作成有無を分岐できます
・パラメータと組み合わせて使うことが多いです

Outputs

・作成したリソースに関する情報をコンソールに出力します
・スタック間のリソース情報の連携に使用します

組み込み関数

!Ref

・他の要素を参照します
・作成されるまでわからない値(VPCIdなど)に使用します
・AWSリソースごとにRefが参照する値は変わるため、公式ドキュメントで確認する必要があります

!Sub

・他の要素を参照します(!Refとは異なり${}が必要です)
・文字列の結合ができます

!GetAtt

リソースの論理ID.属性で任意に指定した要素を参照できます
・Outputsセクションで使用することが多いです
・!GetAttで取得できる値もAWSリソースごとに公式ドキュメントで確認する必要があります

!FindInMap

・Mappingsで定義された値からキーに合致する値を参照します

!ImportValue

・他のスタックから値をインポートします

!Equals

・Conditionsの条件式の中で値が一致するかを判定します

疑似パラメータ(事前に定義された変数)

AWS::Region

・テンプレートが実行されたリージョンを自動で取得します

AWS::AccountId

・テンプレートが実行されたアカウントIDを自動で取得します

DependsOnが必要なケース

!Ref等を使用する場合、CloudFormationは依存関係を自動で解決してくれますが、
以下のように 「!Ref等を使用しないリソース間に依存関係がある場合」 にはDependsOnが必要になります。

PublicRoutePublicRouteTablemyInternetGatewayに対して!Refを使用していますが、AttachGatewayには使用していません(依存関係はあるのに)

~.yml
  myInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: test-igw

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref myVPC
      InternetGatewayId: !Ref myInternetGateway

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref myVPC
      Tags:
        - Key: Name
          Value: public-rt-a

  # 0.0.0.0/0 → IGW
  PublicRoute:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway # IGWアタッチ後にルート作成するため DependsOn を使う
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref myInternetGateway

おわりに

実際に使ってみた記事もぜひ合わせてご参照ください。

0
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?