現場実践|CloudFormation実践設計

CloudFormationスタック設計の実践|ネストスタック・クロススタック参照・スタック管理のベストプラクティス

「CloudFormationを使い始めたが一つのテンプレートが巨大になってきた」——CloudFormationのネストされたスタック・クロススタック参照(Exports/Fn::ImportValue)・スタック分割の設計パターンを解説します。

読了目安:約15分更新日:2026年4月

💡 CloudFormationのスタック設計はTerraformのモジュール設計と同様に「1つのスタックに全てを詰め込まない」ことが重要です。適切なスタック分割で変更の影響範囲を限定できます。

この記事を書いた人
現役ITエンジニア・IT講師(経験14年)
CCNA・CCNP 取得LPIC-1 保有SES現場を複数経験

CloudFormationを使ったAWS環境のIaC化を複数案件で担当してきた立場から解説します。

1. スタック分割の基本パターン

🏗️
インフラ層(ネットワーク)
VPC・サブネット・IGW・NAT GW・ルートテーブル・セキュリティグループを1つのスタックにまとめる。頻度が低い変更のため独立させることで安定性が高まる。
🗄️
データ層(DB・ストレージ)
RDS・ElastiCache・S3・DynamoDBを独立したスタックにまとめる。データは最も慎重に扱うため、アプリ層から分離して変更頻度を最小にする。
⚙️
アプリ層(EC2・ECS・ALB)
EC2・ECS・ALB・Auto Scalingを独立したスタックにまとめる。最も頻繁に変更される層のため独立させることで他の層への影響を防ぐ。

2. クロススタック参照の実装

# ネットワークスタック(出力側)
Outputs:
  VpcId:
    Value: !Ref VPC
    Export:
      Name: !Sub "${AWS::StackName}-VpcId"
  PrivateSubnet1aId:
    Value: !Ref PrivateSubnet1a
    Export:
      Name: !Sub "${AWS::StackName}-PrivateSubnet1aId"

---
# アプリスタック(参照側)
Parameters:
  NetworkStackName:
    Type: String
    Default: "network-stack"

Resources:
  AppInstance:
    Type: AWS::EC2::Instance
    Properties:
      SubnetId: !ImportValue
        !Sub "${NetworkStackName}-PrivateSubnet1aId"

3. スタック操作の注意点

  • 削除保護の有効化:本番スタックは削除保護(Termination Protection)を有効化する。誤ってスタックを削除しようとした際に確認画面が表示される
  • 変更セット(Change Set)を使う:本番スタックに変更を加える前に必ず変更セットを作成して「何が変更されるか」を確認してから実行する
  • ドリフト検出:CloudFormationコンソールの「ドリフト検出」でスタックの定義と実際のリソース状態の差分を確認する。手動変更による差分を発見できる
📌 この記事のポイント
  • CloudFormationはネットワーク・データ・アプリの3層にスタックを分割してクロススタック参照で連携するのが標準設計
  • Exports/Fn::ImportValueでスタック間のリソース参照を安全に行い、各スタックの変更範囲を限定する
  • 本番スタックは削除保護有効化・変更前のChange Set確認・定期的なドリフト検出が必須の運用ルール

キャリアの疑問、一緒に解決しませんか?

Route Bloomでは、インフラ系ITエンジニアを目指す方への個別サポートを行っています。2026年7月からフリーランス講師として本格始動予定です。

※CloudFormationの機能・制限はAWSにより変更される場合があります。

ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営