0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【第1回】AWS ECS Fargate 11回シリーズ:構成図編(4種類の図で設計を可視化)

Last updated at Posted at 2026-01-23

この記事について

記事 タイトル 状態
第0回 全体ガイド ✅ 完了
第1回 構成図編 📍今回
第2回 VPC & Subnet ⬜ 未読
第3回 NAT Gateway & Route Table ⬜ 未読
第4回 Security Group ⬜ 未読
第5回 ECR & Docker Image ⬜ 未読
第6回 Public ALB ⬜ 未読
第7回 ECS Front & IAM ⬜ 未読
第8回 ECS API & Internal ALB ⬜ 未読
第9回 RDS MySQL ⬜ 未読
第10回 Secrets Manager & 完成 ⬜ 未読

進捗: 9% (1/11記事) | 目標: システム構成図の理解

📁 完全なコードはGitHubで公開:👉 GitHub: fargate-iac-02


1. はじめに

この記事は、docker-composeで動いていたWebアプリケーションをAWS ECS Fargateに移行するために、構成設計を行った記録です。

1-1. この記事で学べること

  • AWS構成図の書き方(4種類・7図:論理構成図・配置構成図・ネットワーク図×4・データフロー図)
  • 論理構成図と配置構成図の違いと使い分け
  • 実務での図の描き分け方(目的別に4種類)
  • ECS Fargateの構成設計の考え方
  • 詳細設計で決めるべきこと(命名規則、タグ戦略、変数管理など)

1-2. 対象読者

  • AWSを少し触ったことがある方
  • docker-composeは使ったことがある方
  • インフラ設計を学びたい方
  • 構成図の書き方に悩んでいる方

1-3. 想定環境

  • AWS: ECS Fargate, RDS, ALB, VPC など
  • IaC: Terraform(実装は次回の記事で)
  • 言語: Go(API)、HTML/CSS/JS(Frontend)

2. 元の構成(docker-compose)

2-1. 3層アーキテクチャ

移行前の構成は、典型的な3層アーキテクチャです。

  • Front: Nginx(静的コンテンツ配信)
  • API: Go言語(ビジネスロジック)
  • DB: MySQL(データ永続化)

2-2. docker-compose.ymlの構成

services:
  front:
    build: ./front
    ports:
      - "8081:80"
    
  api:
    build: ./api
    ports:
      - "8080:8080"
    environment:
      - DB_SERVERNAME=db-container
    depends_on:
      - db
    
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: cloudtech
    volumes:
      - db-data:/var/lib/mysql

2-3. この構成の課題

ローカル開発環境としては問題ありませんが、本番運用には以下の課題があります:

  • スケールできない: 1台のPCで動作
  • 可用性が低い: 障害時に自動復旧なし
  • セキュリティ: すべてのポートが公開
  • 運用負荷: サーバー管理が必要

これらを解決するため、ECS Fargateへの移行を決定しました。


3. 移行先の構成(ECS Fargate)

3-1. なぜECS Fargateか

以下の理由からECS Fargateを選択しました:

要件 ECS Fargate 代替案(EC2)
サーバー管理 不要 必要
Multi-AZ 簡単 手動設定
Auto Scaling 組み込み 別途設定
コスト 使用量課金 常時課金

3-2. 主要なAWSサービス

  • ECS Fargate: コンテナ実行環境(サーバーレス)
  • ALB: Application Load Balancer(負荷分散)
  • RDS: マネージドデータベース(Multi-AZ対応)
  • VPC: Virtual Private Cloud(ネットワーク分離)
  • ECR: Elastic Container Registry(イメージ保管)
  • CloudWatch Logs: ログ集約
  • Secrets Manager: 機密情報管理

4. 構成図の種類と使い分け

実務では、目的に応じて4種類の図を使い分けます。

図の種類 目的 対象者 詳細度
論理構成図 全体像の理解 全員
配置構成図 AZ配置の理解 インフラエンジニア
ネットワーク構成図 通信フローとSG設計 インフラ・セキュリティ
データフロー図 リクエスト処理の流れ アプリ開発者

4-1. 論理構成図(Logical Architecture Diagram)

目的: システム全体の論理的な構成を俯瞰する
対象者: プロジェクト全員(開発者、PM、営業など)
特徴: 物理配置を無視、コンポーネント間の関係のみ表現

この図で分かること:

  • システムの主要コンポーネント
  • 3層アーキテクチャの構造
  • Supporting Servicesの役割

料理で例えると:

  • Frontend = レストランのホール(お客様対応)
  • Backend = 厨房(調理)
  • Data = 冷蔵庫(食材保管)

4-2. 配置構成図(Deployment Architecture Diagram)

目的: Multi-AZ構成と物理配置を理解する
対象者: インフラエンジニア、SRE
特徴: AZ、Subnet、可用性を明示

この図で分かること:

  • Multi-AZ構成(2つのAZ)
  • Subnetの分割(Public、Private App、Private DB)
  • 各AZでのリソース配置

可用性のポイント:

  • AZ-1aが障害 → AZ-1cが処理継続
  • RDSは自動フェイルオーバー(1-2分)
  • ALB、ECSは自動的に正常なAZに振り分け

4-3. ネットワーク構成図(Network Diagram)

目的: 通信フロー、Security Group、ポート番号を理解する
対象者: インフラエンジニア、セキュリティエンジニア、アプリケーション開発者
特徴: Security Group、通信プロトコル、ポート番号を明示

4-3-1. 通信フロー図(Communication Flow)

各層の通信経路とポート番号を表現:

📋 通信フローの詳細:

ステップ 送信元 送信先 プロトコル:ポート Security Group
ユーザー IGW HTTPS:443 / HTTP:80 -
IGW Public ALB ルーティング SG: alb-public
Public ALB ECS Front HTTP:80 SG: ecs-front
ECS Front Internal ALB HTTP:80 SG: alb-internal
Internal ALB ECS API HTTP:8080 SG: ecs-api
ECS API RDS MySQL:3306 SG: rds

色の意味:

  • 🔵 青系: ユーザー・Gateway(外部接続)
  • 🟢 緑系: ALB(負荷分散)
  • 🟠 オレンジ系: ECS(コンピュート)
  • 🟣 紫系: RDS(データベース)

4-3-2. External通信(インターネット側)

目的: インターネットからFrontendまでの通信フローとSG設定

この図で分かること:

  • インターネットからの入口
  • Public ALBのSG設定(HTTPS/HTTP受付)
  • FrontendのSG設定(Public ALBからのみ受付)

🔑 External通信のポイント:

  1. Public ALB: インターネット全体(0.0.0.0/0)からHTTPS/HTTP受付
  2. ECS Frontend: Public ALBからのみHTTP:80受付(Security Group参照)
  3. HTTPS終端: Public ALBでHTTPSを終端、内部はHTTP通信

色の意味:

  • 🔴 赤系: Security Group(ファイアウォール)
  • 🟢 緑系: AWSリソース(実体)
  • 🔵 青系: 外部接続
  • 🟡 黄系: ルール詳細

4-3-3. Internal通信(VPC内部)

目的: Frontend以降のVPC内部通信フローとSG設定

この図で分かること:

  • VPC内部の通信フロー(4段階)
  • 各SGの詳細ルール
  • APIからAWSサービスへの外部通信

🔑 Internal通信のポイント:

  1. Frontend → Internal ALB: Security Group参照で制御
  2. Internal ALB → API: ポート変換(80 → 8080)
  3. API → RDS: DB専用SGで完全隔離
  4. API → AWS Services: ECR/Secrets Manager接続用のHTTPS:443

色の意味:

  • 🔴 赤系: Security Group(ファイアウォール)
  • 🟢 緑系: AWSリソース(実体)
  • 🔵 青系: 外部接続
  • 🟡 黄系: ルール詳細

4-3-4. Security Groupルール詳細表

目的: 各SGの具体的なInbound/Outboundルールを確認する

📥 Inbound Rules(インバウンド)

SG名 対象リソース プロトコル ポート 送信元 説明
alb-public Public ALB TCP 443 0.0.0.0/0 HTTPS(インターネット)
TCP 80 0.0.0.0/0 HTTP(インターネット)
ecs-front ECS Frontend TCP 80 sg-alb-public Public ALBからのみ
alb-internal Internal ALB TCP 80 sg-ecs-front Frontendからのみ
ecs-api ECS API TCP 8080 sg-alb-internal Internal ALBからのみ
rds RDS MySQL TCP 3306 sg-ecs-api APIからのみ

📤 Outbound Rules(アウトバウンド)

SG名 対象リソース プロトコル ポート 宛先 説明
alb-public Public ALB TCP 80 sg-ecs-front Frontendへ転送
ecs-front ECS Frontend TCP 80 sg-alb-internal Internal ALBへ転送
alb-internal Internal ALB TCP 8080 sg-ecs-api APIへ転送
ecs-api ECS API TCP 3306 sg-rds RDSへクエリ
TCP 443 0.0.0.0/0 ECR/Secrets接続
rds RDS MySQL - - なし 完全隔離

🔑 セキュリティ設計のポイント:

  1. 最小権限の原則

    • 各SGは必要最小限の通信のみ許可
    • 不要なポートは全てブロック
  2. Security Group参照

    • IPアドレスではなくSG IDで制御
    • リソースのIPが変わっても影響なし
  3. 多層防御

    • Public → Private → DB と段階的に制限
    • RDSは完全隔離(APIからのみアクセス可)
  4. 外部通信の最小化

    • API ServiceのみHTTPS:443を外部に許可(ECR、Secrets Manager用)
    • それ以外は全てVPC内部通信

図と表の使い分け:

  • 図(4-3-2, 4-3-3): 全体像の把握、通信フローの理解
  • 表(4-3-4): 実装時の詳細確認、ルール漏れチェック

4-4. データフロー図(Data Flow Diagram)

目的: リクエスト/レスポンスの処理フローを時系列で理解する
対象者: アプリケーション開発者、QAエンジニア
特徴: シーケンス図でリクエストの流れを表現、時間軸順に番号付与

データフロー図は、シナリオ別に3つに分割しました:

  1. デプロイ・起動フロー(初回起動時)
  2. 通常リクエストフロー(正常系)
  3. エラーハンドリングフロー(異常系)

例:通常リクエストフロー(DB呼び出し)

レスポンス時間の内訳:

処理 時間 備考
IGW → ALB ~5ms ネットワーク遅延
ALB → Front ~10ms HTTP転送
Front → API ~20ms 内部ALB経由
API → RDS ~30ms SQLクエリ実行
レスポンス返却 ~10ms 逆経路
合計 ~150ms

ポイント:

  • 時間軸番号: ①②③で処理の順序が明確
  • レスポンス時間: 各処理の所要時間を記載
  • HTTPS終端: Public ALBでHTTPSを終端、内部はHTTP

この図を見れば、「リクエストがどう処理されるか」が時系列で分かります。


5. 次回予告

第2回: Phase 1-1 - VPC & Subnetの構築

次回は、構成図をもとに実際にTerraformでAWSリソースを構築していきます。

Phase 1-1で作成するもの:

  • VPC × 1
  • Subnet × 6(Public × 2、Private App × 2、Private DB × 2)
  • Internet Gateway × 1

Phase 1-1を完了すると、ネットワークの基盤が整います。


6. まとめ

この記事では、以下の4種類・7図を作成しました:

  1. 論理構成図: システム全体の俯瞰
  2. 配置構成図: Multi-AZ構成の理解
  3. ネットワーク構成図:
    • 通信フロー図
    • External通信図
    • Internal通信図
    • SGルール詳細表
  4. データフロー図: リクエスト処理の流れ

実務での使い分け:

  • 設計初期: 論理構成図で全体像を共有
  • 詳細設計: 配置構成図とネットワーク構成図で具体化
  • 開発フェーズ: データフロー図でAPI仕様を明確化

次回から、この設計図をもとに実際にTerraformでインフラを構築していきます!


7. 参考リンク


(続く)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?