EXERCISE 90分

「これが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
Dependenciespackage.json + lock file で明示的に宣言
Config環境変数(AWS SSM Parameter Store)
Backing ServicesRDS, ElastiCache, S3 をURLで接続設定
Build/Release/RunCI/CD でイメージビルド → ECRにpush → ECS deploy
Processesステートレスなコンテナ。セッションはRedis
Port Bindingコンテナが自身のポートでHTTPサーバーを起動
ConcurrencyECS Auto Scaling でプロセスタイプ別にスケール
DisposabilityGraceful Shutdown実装、SIGTERM対応
Dev/Prod ParityDocker Compose(dev) = ECS(prod) 同一イメージ
Logsstdout出力 → CloudWatch Logs → OpenSearch
Admin Processesマイグレーション等はECS RunTaskで実行

Part 2: コンテナ + サーバーレス設計(25分)

コンテナとサーバーレスの使い分けを設計せよ。

解答例
コンポーネント実行基盤理由
API ServerECS Fargate常時稼働、WebSocket対応
Web FrontendCloudFront + S3静的配信
Worker (非同期)ECS Fargate (Spot)長時間処理、コスト最適化
WebSocket ServerECS Fargate永続接続が必要
ファイル処理Lambdaイベント駆動、S3トリガー
外部API連携Lambda + SQS非同期、リトライ対応
スケジュール処理Lambda + EventBridgecron相当
メール送信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 Aurorar6g.xlarge × 2 (Writer+Reader)$4,800
ElastiCacher6g.large × 2ノード$1,800
Lambda月100万リクエスト$200
S310TB + 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要素をクラウドネイティブに適用
コンテナ/サーバーレス特性に応じた使い分けでコスト最適化
IaCCDKスタック分割と環境管理
コスト予算内で余裕のある設計

チェックリスト

  • 12-Factor Appの原則を適用した設計ができた
  • コンテナとサーバーレスの使い分けを設計できた
  • IaCのスタック構成を設計できた
  • コスト見積もりと最適化計画を策定できた

次のステップへ

最後は卒業クイズです。


推定読了時間: 90分