「これがMonth 8の集大成だ」と佐藤CTOが言います。「SaaSプロダクトのクラウドネイティブアーキテクチャを設計してほしい。12-Factor App、コンテナ、サーバーレス、IaC、コスト最適化まで、全てを統合した設計書を作成してくれ。」
シナリオ
企業: B2B SaaSスタートアップ「TaskFlow」
製品: プロジェクト管理ツール
要件:
- マルチテナント(100社、将来1000社想定)
- リアルタイム通知(WebSocket)
- ファイルアップロード(社あたり最大100GB)
- API連携(Slack, GitHub, Jira)
- 月間コスト予算: $30,000以内
- SLA: 99.9% Availability
Part 1: 12-Factor App 設計(20分)
TaskFlowを12-Factor Appの原則に従って設計せよ。
解答例
| Factor | 適用 |
|---|---|
| Codebase | モノレポ(Turborepo): API, Worker, Web |
| Dependencies | package.json + lock file で明示的に宣言 |
| Config | 環境変数(AWS SSM Parameter Store) |
| Backing Services | RDS, ElastiCache, S3 をURLで接続設定 |
| Build/Release/Run | CI/CD でイメージビルド → ECRにpush → ECS deploy |
| Processes | ステートレスなコンテナ。セッションはRedis |
| Port Binding | コンテナが自身のポートでHTTPサーバーを起動 |
| Concurrency | ECS Auto Scaling でプロセスタイプ別にスケール |
| Disposability | Graceful Shutdown実装、SIGTERM対応 |
| Dev/Prod Parity | Docker Compose(dev) = ECS(prod) 同一イメージ |
| Logs | stdout出力 → CloudWatch Logs → OpenSearch |
| Admin Processes | マイグレーション等はECS RunTaskで実行 |
Part 2: コンテナ + サーバーレス設計(25分)
コンテナとサーバーレスの使い分けを設計せよ。
解答例
| コンポーネント | 実行基盤 | 理由 |
|---|---|---|
| API Server | ECS Fargate | 常時稼働、WebSocket対応 |
| Web Frontend | CloudFront + S3 | 静的配信 |
| Worker (非同期) | ECS Fargate (Spot) | 長時間処理、コスト最適化 |
| WebSocket Server | ECS Fargate | 永続接続が必要 |
| ファイル処理 | Lambda | イベント駆動、S3トリガー |
| 外部API連携 | Lambda + SQS | 非同期、リトライ対応 |
| スケジュール処理 | Lambda + EventBridge | cron相当 |
| メール送信 | Lambda + SES | イベント駆動 |
アーキテクチャ全体図:
CloudFront → ALB → ECS (API) → RDS + Redis
→ SQS → Lambda (外部連携)
→ S3 → Lambda (ファイル処理)
EventBridge → Lambda (スケジュール)
Part 3: IaC設計(25分)
TerraformまたはCDKでのインフラ設計を策定せよ。
解答例
■ CDKスタック構成
NetworkStack: VPC, Subnets, VPC Endpoints
DatabaseStack: RDS Aurora, ElastiCache Redis
StorageStack: S3 Buckets, CloudFront
ComputeStack: ECS Cluster, Services, Task Definitions
ServerlessStack: Lambda Functions, SQS, EventBridge
MonitoringStack: CloudWatch, SNS, Alarms
■ 環境管理
cdk.json の context で環境別パラメータ管理
dev/staging/production を同一コードで展開
■ CI/CD
GitHub Actions → cdk synth → cdk diff → 手動承認 → cdk deploy
ステージング: 自動デプロイ
本番: 手動承認 + Slack通知
Part 4: コスト最適化(20分)
$30,000/月の予算内に収めるコスト設計を行え。
解答例
| コンポーネント | スペック | 月額コスト |
|---|---|---|
| ECS Fargate (API) | 1vCPU/2GB × 6タスク | $3,600 |
| ECS Fargate (Worker) | 0.5vCPU/1GB × 4タスク (Spot) | $500 |
| RDS Aurora | r6g.xlarge × 2 (Writer+Reader) | $4,800 |
| ElastiCache | r6g.large × 2ノード | $1,800 |
| Lambda | 月100万リクエスト | $200 |
| S3 | 10TB + CloudFront | $2,500 |
| NAT Gateway + VPC Endpoints | $1,000 | |
| CloudWatch | $800 | |
| その他 (ALB, Route53, WAF等) | $1,500 | |
| 合計 | $16,700 |
Savings Plans適用で Fargate + RDS をさらに30%削減可能
→ 実質 $13,000/月(予算の43%)
→ 残りの$17,000は将来のスケーリング余裕
まとめ
| ポイント | 内容 |
|---|---|
| 12-Factor | 全12要素をクラウドネイティブに適用 |
| コンテナ/サーバーレス | 特性に応じた使い分けでコスト最適化 |
| IaC | CDKスタック分割と環境管理 |
| コスト | 予算内で余裕のある設計 |
チェックリスト
- 12-Factor Appの原則を適用した設計ができた
- コンテナとサーバーレスの使い分けを設計できた
- IaCのスタック構成を設計できた
- コスト見積もりと最適化計画を策定できた
次のステップへ
最後は卒業クイズです。
推定読了時間: 90分