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

現場実践|CloudFormation実践設計
CloudFormationスタック設計の実践|ネストスタック・クロススタック参照・スタック管理のベストプラクティス
「CloudFormationを使い始めたが一つのテンプレートが巨大になってきた」——CloudFormationのネストされたスタック・クロススタック参照(Exports/Fn::ImportValue)・スタック分割の設計パターンを解説します。
💡 CloudFormationのスタック設計はTerraformのモジュール設計と同様に「1つのスタックに全てを詰め込まない」ことが重要です。適切なスタック分割で変更の影響範囲を限定できます。
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月からフリーランス講師として本格始動予定です。
ABOUT ME




