AWS入門 — CloudFormation

CloudFormation

インフラをコードで定義する(IaC)

© 2026 genba support
AWS入門 — CloudFormation

なぜインフラをコードにするのか

手順書とコンソール手作業で構築すると 再現できない

  • 環境差分(dev / stg / prod)を 同じ定義 で作りたい
  • レビューと履歴管理を Gitで 行いたい
  • 壊れても 同じ状態に戻せる ようにしたい

インフラも「アプリのコード」と同じように扱う = IaC

© 2026 genba support
AWS入門 — CloudFormation

CloudFormation — AWS公式のIaC

AWSリソースを YAML / JSONテンプレート で宣言的に管理

  • AWS公式 = 追加課金なし、対応リソース範囲が広い
  • スタック 単位で作成・更新・削除をまとめて行える
  • 変更セット(Change Set)で適用前に差分を確認できる

新サービスへの対応も早い、AWS専業なら有力な選択肢

© 2026 genba support
AWS入門 — CloudFormation

テンプレートの構造

セクション / 最小例

© 2026 genba support
AWS入門 — CloudFormation

テンプレートの基本セクション

セクション 役割
Parameters デプロイ時に渡す変数(環境名・サイズ等)
Mappings 静的な対応表(リージョン → AMI ID等)
Conditions 環境による分岐(prodのみ作る等)
Resources 作成するAWSリソース(必須
Outputs 他スタックや人間に見せる値

必須は Resources だけ、シンプルから始められる

© 2026 genba support
AWS入門 — CloudFormation

最小テンプレート

ECRリポジトリ を1つ作るだけの例

AWSTemplateFormatVersion: '2010-09-09'
Description: Minimal ECR repository

Resources:
  AppRepository:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: myapp
      ImageScanningConfiguration:
        ScanOnPush: true
      ImageTagMutability: IMMUTABLE

Outputs:
  RepositoryUri:
    Value: !GetAtt AppRepository.RepositoryUri
© 2026 genba support
AWS入門 — CloudFormation

Parameters でテンプレートを再利用

環境ごとに値を変えてデプロイできる

Parameters:
  EnvName:
    Type: String
    AllowedValues: [dev, stg, prod]
  InstanceType:
    Type: String
    Default: t3.small

Resources:
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      Tags:
        - Key: Env
          Value: !Ref EnvName
© 2026 genba support
AWS入門 — CloudFormation

組み込み関数

Ref / GetAtt / Sub / ImportValue

© 2026 genba support
AWS入門 — CloudFormation

よく使う組み込み関数

関数 用途
!Ref 別リソースのIDを参照 !Ref VpcId
!GetAtt リソースの属性を取得 !GetAtt Bucket.Arn
!Sub 文字列に変数を埋め込む !Sub "${Env}-app"
!ImportValue 別スタックのOutputを参照 !ImportValue VpcId

関数を使いこなせるとテンプレートの 重複が減る

© 2026 genba support
AWS入門 — CloudFormation

スタック操作

create / update / Change Set / drift

© 2026 genba support
AWS入門 — CloudFormation

ライフサイクル

create-stack    → リソースをまとめて作成
update-stack    → 差分のみ更新
delete-stack    → スタック内のリソースを一括削除
  • すべて CLI / コンソール / SDK から実行可
  • 失敗時は 自動ロールバック (前の状態に戻る)
  • 作成途中で止まると ROLLBACK_COMPLETE 状態になることも
© 2026 genba support
AWS入門 — CloudFormation

Change Set — 適用前に差分を見る

「このupdateで 何が変わるか」を事前に確認

aws cloudformation create-change-set \
  --stack-name myapp \
  --change-set-name update-2026-05 \
  --template-body file://template.yaml

aws cloudformation describe-change-set \
  --stack-name myapp --change-set-name update-2026-05

本番では必ずChange Setを通す のが鉄則

© 2026 genba support
AWS入門 — CloudFormation

ドリフト検出

テンプレートと 実際のリソースの差分 を検知する

  • 誰かがコンソールで手動変更すると「ドリフト」が発生
  • detect-stack-drift で定期的にチェック
  • ドリフトがあるとupdate時に 意図しない置換 が起きる

IaC管理下のリソースは コンソールで触らない ルール作りが大事

© 2026 genba support
AWS入門 — CloudFormation

詰まりポイントと比較

落とし穴 / Terraform / CDK との違い

© 2026 genba support
AWS入門 — CloudFormation

詰まりやすいポイント

  • 更新できないプロパティ がある(例: RDSのエンジン種別)
    • 変更すると 置換(既存リソース削除 + 再作成)が走る
  • 削除保護 をかけたDBは delete-stack で消えない
  • 論理ID変更 = リソース削除 + 再作成
    • 名前変更したいときは要注意

「壊して作り直す」が前提のリソース設計を意識する

© 2026 genba support
AWS入門 — CloudFormation

Terraform / CDK との違い

観点 CloudFormation Terraform CDK
提供元 AWS公式 HashiCorp AWS公式
記述 YAML / JSON HCL TypeScript / Python
マルチクラウド ×
学習コスト 中(言語次第)

AWS専業なら CloudFormation または CDK(CFnを生成)が無難

© 2026 genba support
AWS入門 — CloudFormation

まとめ

  • インフラを コード化 すると再現性・履歴・レビューが手に入る
  • CloudFormation はAWS公式・追加課金なしの安心感
  • 本番運用では Change Set削除保護 を徹底
  • 新規プロジェクトでは CDK も有力な選択肢

触ったコンソール操作を YAMLに翻訳する ところから始める

© 2026 genba support