2
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

☁️ クラウド時代のWeb3層構造を図解する【AWS・Docker・API・セキュリティ】

2
Posted at

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を追加していくのがおすすめです🌟

💬 質問や感想があれば、コメント欄でお気軽にどうぞ!
👍 役に立ったら、いいね&ストックをお願いします!
🎓 ここまで読んでくださって、本当にありがとうございました!

2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?