1. 👋 はじめに
前回の記事では、Web3層構造の基本(Webサーバー・APサーバー・DBサーバー)を解説しました。
今回はその続編!「じゃあ実際のクラウド環境ではどう構成するの?」という疑問に答えます。
- ☁️ AWSの各サービスが3層のどこを担うか
- 🐳 DockerコンテナがAWS上でどう動くか
- 📡 API通信の仕組み
- 🔒 セキュリティをどう守るか
これらを初心者にもわかりやすく解説します!
2. 🗺️ 全体構成図
まず完成形を見てみましょう。
🌍 インターネット
│
▼
┌───────────────────────────────────────────────┐
│ ☁️ AWS(Amazon Web Services) │
│ │
│ 👤 ユーザー │
│ │ │
│ ▼ │
│ 🌐 CloudFront(CDN) │
│ │静的ファイル │動的リクエスト │
│ ▼ ▼ │
│ 🪣 S3 ⚖️ ALB(ロードバランサー) │
│ (静的ホスティング) │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ 🐳 ECS Fargate │ │
│ │ コンテナ① │ │
│ │ コンテナ② │ │
│ │ コンテナ③ │ │
│ └────────────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ ▼ ▼ │
│ 🗄️ RDS 🔴 ElastiCache │
│ (PostgreSQL) (Redis) │
│ │
└───────────────────────────────────────────────┘
それぞれのサービスが3層のどこを担うか整理すると:
| 層 | AWSサービス | 役割 |
|---|---|---|
| 🌐 Web層 | CloudFront + S3 + ALB | 配信・リバースプロキシ・負荷分散 |
| ⚙️ AP層 | ECS Fargate(Dockerコンテナ) | ビジネスロジック・API |
| 🗄️ DB層 | RDS + ElastiCache | データ永続化・キャッシュ |
3. 🌐 Web層:CloudFront・S3・ALB
☁️ CloudFront(CDN)
CloudFrontはAWSのCDN(コンテンツデリバリーネットワーク) サービスです。
🌍 世界中にエッジサーバーを持つ
↓
ユーザーの近くのサーバーからコンテンツを配信
↓
✅ 表示が速い!
✅ オリジンサーバーへの負荷が減る!
✅ DDoS攻撃を防ぐ(AWS Shield)
主な役割:
- 📄 静的ファイル(HTML・CSS・JS・画像)のキャッシュ配信
- 🔒 HTTPS(SSL/TLS)の終端処理
- 🛡️ WAF(Web Application Firewall)との連携
🪣 S3(Simple Storage Service)
S3はAWSのオブジェクトストレージです。フロントエンド(React/Next.jsなど)のビルド済みファイルを置いておくと、CloudFront経由で配信できます。
📦 S3バケット
└─ index.html
└─ main.js
└─ style.css
└─ images/
↑
npm run build で生成したファイルをアップロード
⚖️ ALB(Application Load Balancer)
ALBはリクエストを複数のコンテナへ振り分けるロードバランサーです。
👤 ユーザーからのリクエスト
↓
⚖️ ALB
╱ │ ╲
▼ ▼ ▼
🐳コンテナ① ② ③ ← 負荷を均等に分散
ALBのその他の役割:
- 🔀 URLパスによるルーティング(
/api/*→ APサーバー、/→ S3) - 🔒 HTTPSの終端(SSL証明書の管理)
- 🏥 ヘルスチェック(異常なコンテナへのルーティングを自動停止)
4. 🐳 AP層:ECS Fargate(Dockerコンテナ)
ECS Fargateとは?
ECS(Elastic Container Service)はDockerコンテナを管理するAWSのサービスです。Fargateを使うと、サーバー(EC2)の管理が不要になります。
【EC2起動タイプ】
自分でEC2を用意 → Dockerをインストール → コンテナを起動
😓 サーバーのOSアップデート・セキュリティパッチも自分で管理
【Fargate起動タイプ】
コンテナの設定だけ渡す → AWSが全部やってくれる
😊 サーバー管理不要!コードに集中できる
デプロイの流れ
1️⃣ Dockerfileを書く
↓
2️⃣ docker build でイメージを作成
↓
3️⃣ ECR(Elastic Container Registry)にpush
↓
4️⃣ ECSのタスク定義を更新
「このECRイメージを、このCPU・メモリで動かして」
↓
5️⃣ ECS(Fargate)がECRからpullしてコンテナ起動 🚀
↓
6️⃣ ALBがコンテナをヘルスチェック → 正常ならトラフィックを流す
タスク定義のイメージ
{
"family": "my-api",
"containerDefinitions": [
{
"name": "api",
"image": "123456789.dkr.ecr.ap-northeast-1.amazonaws.com/my-api:latest",
"portMappings": [{ "containerPort": 8000 }],
"environment": [
{ "name": "DATABASE_URL", "value": "..." }
],
"memory": 512,
"cpu": 256
}
]
}
オートスケーリング
ECS Fargateはアクセス量に応じてコンテナ数を自動で増減できます。
📈 アクセスが増えてきた!
↓
ECSが自動でコンテナを追加起動 🐳🐳🐳🐳🐳
↓
📉 アクセスが落ち着いた
↓
ECSが自動でコンテナを削減 🐳
↓
💰 無駄なコストを削減!
5. 🗄️ DB層:RDS・ElastiCache
🗄️ RDS(Relational Database Service)
RDSはAWSのマネージド型リレーショナルDBサービスです。
【自前でDBサーバーを立てる場合】
EC2にPostgreSQLをインストール
→ バックアップ設定
→ フェイルオーバー設定
→ バージョンアップ管理
→ 全部自分でやる 😓
【RDSを使う場合】
これら全部AWSがやってくれる 😊
→ マルチAZ(複数データセンター)で冗長化も簡単
RDSで選べる主なDB:
| DB | 特徴 |
|---|---|
| PostgreSQL | 高機能・JSON対応・おすすめ🌟 |
| MySQL | 高速・広く普及 |
| Aurora | AWS独自の高性能DB(PostgreSQL/MySQL互換) |
🔴 ElastiCache(Redisキャッシュ)
ElastiCacheはAWSのマネージド型キャッシュサービスです。Redisを使うことが多いです。
【キャッシュなし】
毎回DBに問い合わせ → 遅い・DBに負荷がかかる 😓
【Redisキャッシュあり】
1回目:DB → データ取得 → Redisに保存
2回目以降:Redisから即返す → 速い!DBへの負荷も減る 😊
主なユースケース:
- ⚡ 頻繁にアクセスされるデータのキャッシュ
- 🔐 セッション情報の保存
- ⏱️ レートリミット(APIの呼び出し回数制限)
6. 📡 API通信の仕組み
REST APIの基本
現代のWeb3層構造では、フロントエンドとバックエンドがREST APIでJSON形式のデータをやり取りします。
【フロントエンド(React)】
「商品一覧をください」
GET https://api.example.com/items
↓ HTTPリクエスト
【APサーバー(FastAPI on ECS)】
DBに問い合わせてデータを取得
↓ JSONレスポンス
【フロントエンド(React)】
受け取ったJSONを画面に表示 🖥️
HTTPメソッドの使い分け
| メソッド | 用途 | 例 |
|---|---|---|
| GET | データ取得 | 商品一覧・詳細の取得 |
| POST | データ作成 | 新規注文の作成 |
| PUT / PATCH | データ更新 | 商品情報の更新 |
| DELETE | データ削除 | 注文のキャンセル |
リクエスト・レスポンスの例
📤 リクエスト
GET /items/1
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json
📥 レスポンス
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "りんご",
"price": 150,
"stock": 100
}
API Gatewayの活用
大規模なシステムではAWS API Gatewayを使ってAPIを一元管理することもあります。
👤 クライアント
↓
🚪 API Gateway
├─ 認証チェック
├─ レートリミット(1分間に100リクエストまで)
├─ ログ記録
↓
⚙️ ECS Fargate(APサーバー)
7. 🔒 セキュリティ:多層防御の考え方
AWSでは「多層防御(Defense in Depth)」の考え方でセキュリティを構築します。外側から内側へ、いくつもの防御壁を設けます。
🌍 インターネット
│
▼
🛡️ 第1の壁:AWS Shield(DDoS対策)
│
▼
🔥 第2の壁:WAF(不正リクエストのブロック)
│
▼
🌐 第3の壁:CloudFront / ALB(HTTPS強制)
│
▼
🔐 第4の壁:セキュリティグループ(ファイアウォール)
│
▼
🏠 第5の壁:VPC(プライベートネットワーク)
│
▼
🔑 第6の壁:IAMロール(権限管理)
│
▼
🗄️ RDS(暗号化・アクセス制限)
🔥 WAF(Web Application Firewall)
WAFはSQLインジェクションやXSSなどのWebアプリ攻撃をブロックします。
❌ ブロックされるリクエストの例
└─ SQLインジェクション: ?id=1 OR 1=1
└─ XSS: <script>alert('hack')</script>
└─ 不審なUser-Agent
└─ 特定の国からのアクセス拒否
🔐 セキュリティグループ
セキュリティグループはAWSの仮想ファイアウォールです。許可するポートと送信元を細かく設定できます。
【ALBのセキュリティグループ】
インバウンド:443(HTTPS)→ インターネットから許可 ✅
インバウンド:80(HTTP)→ インターネットから許可 ✅(HTTPSにリダイレクト)
【ECS(APサーバー)のセキュリティグループ】
インバウンド:8000 → ALBからのみ許可 ✅
インバウンド:8000 → インターネットから直接アクセス 🚫
【RDSのセキュリティグループ】
インバウンド:5432 → ECSからのみ許可 ✅
インバウンド:5432 → インターネットから直接アクセス 🚫
DBへの直接アクセスをECSのみに制限することで、万が一の侵害リスクを大幅に下げられます。
🏠 VPC(Virtual Private Cloud)
VPCはAWS上のプライベートネットワークです。インターネットから隔離された空間を作れます。
┌─────────────────────────────────────────────┐
│ VPC(プライベートネットワーク) │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ パブリックサブネット │ │ プライベートサブネット │ │
│ │ 🌐 ALB │ │ 🐳 ECS Fargate │ │
│ │ (外部公開) │ │ 🗄️ RDS │ │
│ │ │ │ (外部非公開) │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────┘
ECSやRDSをプライベートサブネットに置くことで、インターネットから直接アクセスできない構成にします。
🔑 IAMロール(権限管理)
IAMはAWSリソースへのアクセス権限を管理します。ECSコンテナには必要最小限の権限だけを付与します(最小権限の原則)。
✅ 良い例:ECSタスクのIAMロール
└─ ECRからのイメージpull → 許可
└─ CloudWatchへのログ送信 → 許可
└─ S3の特定バケットへのアクセス → 許可
└─ それ以外 → すべて拒否 🚫
❌ 悪い例
└─ AWSの全サービスへのフルアクセス → 危険!
🔐 シークレット管理
DBのパスワードやAPIキーをコード内に直書きするのは厳禁です!
❌ 悪い例(コードに直書き)
DATABASE_URL = "postgresql://user:password123@db:5432/mydb"
✅ 良い例(AWS Secrets Managerを使う)
1. パスワードをSecrets Managerに登録
2. ECSタスクが起動時にSecrets Managerから取得
3. 環境変数として注入 → コードに秘密情報が残らない 🔒
8. 📊 まとめ:AWS上のWeb3層構造
👤 ユーザー
│ HTTPS
▼
🌐【Web層】
CloudFront(CDN・DDoS対策・WAF)
│静的 │動的
▼ ▼
S3 ALB(負荷分散・ヘルスチェック)
(フロントエンド) │
▼
⚙️【AP層】
ECS Fargate(Dockerコンテナ)
・FastAPI / Node.js etc.
・オートスケーリング
・ECRからイメージをpull
│
┌─────────┴─────────┐
▼ ▼
🗄️【DB層】
RDS(PostgreSQL) ElastiCache(Redis)
・マルチAZ冗長化 ・キャッシュ
・自動バックアップ ・セッション管理
🔒【セキュリティ】
AWS Shield / WAF / セキュリティグループ / VPC / IAM / Secrets Manager
| やること | AWSサービス |
|---|---|
| 静的ファイル配信 | S3 + CloudFront |
| ロードバランサー | ALB |
| コンテナ実行 | ECS Fargate |
| イメージ管理 | ECR |
| データベース | RDS(PostgreSQL) |
| キャッシュ | ElastiCache(Redis) |
| DDoS対策 | AWS Shield |
| WAF | AWS WAF |
| 権限管理 | IAM |
| シークレット管理 | Secrets Manager |
9. 🎯 おわりに
クラウド時代のWeb3層構造は、AWSの各マネージドサービスを組み合わせることで、スケーラブル・セキュア・運用コストの低いシステムを構築できます。
最初は覚えることが多く感じるかもしれませんが、「Web層・AP層・DB層」という3つの役割に整理して考えると、各AWSサービスの位置づけがスッキリ理解できます!💪
まずは小さな構成(ALB + ECS Fargate + RDS)から試してみて、慣れてきたらCloudFrontやElastiCacheを追加していくのがおすすめです🌟
💬 質問や感想があれば、コメント欄でお気軽にどうぞ!
👍 役に立ったら、いいね&ストックをお願いします!
🎓 ここまで読んでくださって、本当にありがとうございました!