この記事について
| 記事 | タイトル | 状態 |
|---|---|---|
| 第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 & 完成 | ⬜ 未読 |
進捗: 0% (0/11記事) | 目標: シリーズ全体の概要
📁 完全なコードはGitHubで公開:👉 GitHub: fargate-iac-02
1. はじめに
このシリーズは、
docker-composeで動いていたWebアプリケーションを、
AWS ECS Fargateに移行するまでの全工程を、自己学習しながら可視化していく全11記事(第0-10回)です。
1-1. このシリーズのゴール
最終的に作るもの:
インターネット
↓ HTTPS
Public ALB
↓ HTTP
ECS Frontend (Nginx)
↓ HTTP
Internal ALB
↓ HTTP
ECS API (Go)
↓ MySQL
RDS MySQL (Multi-AZ)
完成時の動作:
- ✅ ブラウザで画面が表示される
- ✅ 「API Test」ボタンでAPI通信ができる
- ✅ 「Database Test」ボタンでDB接続ができる
1-2. 学ぶこと
- AWS構成図の書き方(4種類・5図)
- Terraformによるインフラ構築(IaCの基本)
- ECS Fargateの実装(サーバーレスコンテナ)
- Multi-AZ構成の設計(高可用性)
- Security Groupの設計(最小権限の原則)
- RDS MySQLの構築(Multi-AZ)
- 段階的な構築方法(Phase分け)
1-3. 初心者向け
-
スキル:
- AWSアカウントを持っている
- docker-composeを少し触ったことがある
- Terraformの名前を聞いたことがある
-
こんな方におすすめ:
- AWS初心者だけど、実務レベルの構成を学びたい
- docker-composeからECSへの移行を考えている
- インフラをコードで管理したい
- 段階的に学びたい
2. シリーズ全体の構成
2-1. 全11記事の構成
| 記事 | タイトル | 内容 | 詳細 |
|---|---|---|---|
| 第0回 | 全体ガイド | このページ | シリーズ構成・学習ルート・Terraform基礎 |
| 第1回 | 構成図編 | 4種類の構成図を作成 | 概念図・論理構成図・物理構成図・シーケンス図 |
| 第2回 | VPC & Subnet | ネットワーク基盤(前半) | VPC作成・Public/Private Subnet・IGW |
| 第3回 | NAT & Route Table | ネットワーク基盤(後半) | NAT Gateway・Route Table・ルーティング設計 |
| 第4回 | Security Group | セキュリティ設計 | 5つのSG作成・インバウンド/アウトバウンド設計 |
| 第5回 | ECR & Docker | コンテナレジストリ | ECR作成・Dockerイメージpush・Front/API両方 |
| 第6回 | Public ALB | ロードバランサー | ALB・ターゲットグループ・リスナー設定 |
| 第7回 | ECS Front & IAM | Frontendコンテナ | ECSクラスター・タスク定義・サービス・IAMロール |
| 第8回 | ECS API & Internal ALB | APIコンテナ | Internal ALB・API用ECS・Front→API連携 |
| 第9回 | RDS MySQL | データベース | RDS作成・サブネットグループ・Multi-AZ構成 |
| 第10回 | Secrets Manager & 完成 | 機密情報管理 & 統合 | シークレット管理・ECS環境変数・動作確認 |
3. 学習ルート
3-1. ルート1: 完全版(全記事読破)
第0回(ナビゲーション)
↓
第1回(構成図編)
↓
第2-3回(Phase 1: ネットワーク基盤)
↓
第4-5回(Phase 2: Security & ECR)
↓
第6-7回(Phase 3: ECS Front)
↓
第8回(Phase 4: ECS API)
↓
第9-10回(Phase 5: RDS & 完成)
所要時間: 約2時間(読了)+ 約6-8時間(実装)
こんな人におすすめ:
- AWS初心者で、基礎から学びたい
- 設計の考え方から理解したい
- 時間をかけてじっくり学習したい
3-2. ルート2: 最短ルート(画面表示まで)
第1回(構成図編)
↓
第2-3回(Phase 1: ネットワーク基盤)
↓
第4回(Security Group)※ 最小限だけ
↓
第5回(ECR)
↓
第6-7回(Phase 3: ECS Front)
所要時間: 約1時間(読了)+ 約3-4時間(実装)
こんな人におすすめ:
- とにかく動かしたい
- 画面表示まで最短で完成させたい
- 後からDB接続を追加したい
3-3. ルート3: ピンポイント学習
特定の技術だけ学びたい方向け:
| 学びたいこと | 読むべき記事 |
|---|---|
| VPC設計 | 第2回 |
| NAT Gatewayの仕組み | 第3回 |
| Security Group設計 | 第4回 |
| ECRの使い方 | 第5回 |
| ALBの設定 | 第6回、第8回 |
| ECS Fargateの基本 | 第7回 |
| ECS Task間通信 | 第8回 |
| RDS Multi-AZ | 第9回 |
| Secrets Manager | 第10回 |
4. 各Phase(段階)の詳細
4-1. Phase一覧
| Phase | 目的 | 主要リソース | 完了時の状態 |
|---|---|---|---|
| Phase 1 | ネットワーク基盤構築 | VPC、Subnet、NAT Gateway | AWSコンソールでVPCリソースが確認できる |
| Phase 2 | セキュリティ & コンテナ準備 | Security Group、ECR | DockerイメージをECRにpush完了 |
| Phase 3 | Frontend公開 | Public ALB、ECS Frontend、IAM | ブラウザで画面表示成功 |
| Phase 4 | API層構築 | Internal ALB、ECS API | 「API Test」ボタンが動作 |
| Phase 5 | DB層 & 完成 | RDS MySQL、Secrets Manager | 「Database Test」ボタンが動作 |
4-2. Phase 1: ネットワーク基盤(第2-3回)
| 目的 | 主要リソース | 完了時の状態 |
|---|---|---|
| ネットワーク基盤構築 | VPC、Subnet、IGW、NAT Gateway、Route Table | AWSコンソールでVPCリソースが確認できる |
ポイント:
- Multi-AZ構成(ap-northeast-1a、1c)
- Public / Private / DB の3層分離
- NAT Gateway経由でPrivateからインターネットアクセス
4-3. Phase 2: Security & ECR(第4-5回)
| 目的 | 主要リソース | 完了時の状態 |
|---|---|---|
| セキュリティ基盤 & コンテナ準備 | Security Group、ECR Repository | DockerイメージをECRにpush完了 |
ポイント:
- 最小権限の原則(必要な通信のみ許可)
- SG間参照で動的なIP変更に対応
- Front / API 両方のイメージを管理
4-4. Phase 3: ECS Front(第6-7回)
| 目的 | 主要リソース | 完了時の状態 |
|---|---|---|
| Frontend公開 | Public ALB、ECS Cluster、Task Definition、Service、IAM Role | ブラウザで画面表示成功 |
ポイント:
- ALB → ECS の連携
- Task Execution Role(ECRからpull)
- CloudWatch Logsでログ確認
4-5. Phase 4: ECS API(第8回)
| 目的 | 主要リソース | 完了時の状態 |
|---|---|---|
| API層構築 | Internal ALB、ECS Task Definition(API)、ECS Service | 「API Test」ボタンが動作 |
ポイント:
- 内部通信専用のInternal ALB
- Frontend → Internal ALB → API の通信
- Private Subnet内で完結
4-6. Phase 5: RDS & 完成(第9-10回)
| 目的 | 主要リソース | 完了時の状態 |
|---|---|---|
| DB層 & システム完成 | RDS MySQL(Multi-AZ)、DB Subnet Group、Secrets Manager | 「Database Test」ボタンが動作 |
ポイント:
- Multi-AZ構成で高可用性
- Secrets Managerで認証情報を安全に管理
- ECS環境変数からシークレット参照
5-1. 本番環境構成(全Phase完成時)
| リソース | 数量 | 日額費用(24h) | 月額費用 | 料金根拠URL |
|---|---|---|---|---|
| NAT Gateway | 2 | $3.00 | $90 | NAT Gateway料金 |
| Public ALB | 1 | $0.67 | $20 | ALB料金 |
| Internal ALB | 1 | $0.67 | $20 | ALB料金 |
| ECS Fargate | Front × 2 + API × 2 | $1.50 | $45 | Fargate料金 |
| RDS MySQL | Multi-AZ db.t3.micro | $1.17 | $35 | RDS料金 |
| その他 | EIP、CloudWatch、Secrets等 | $0.20 | $6 | - |
| 合計 | - | 約$7.21/日 | 約$216/月 | - |
💰 コスト計算の詳細:
| リソース | 単価 | 計算式 | 日額 |
|---|---|---|---|
| NAT Gateway | $0.062/時間 × 2 | $0.062 × 24h × 2 = $2.976 | $3.00 |
| ALB(Public) | $0.028/時間 | $0.028 × 24h = $0.672 | $0.67 |
| ALB(Internal) | $0.028/時間 | $0.028 × 24h = $0.672 | $0.67 |
| ECS Fargate | vCPU: $0.04656/時間 Memory: $0.00511/時間 |
(0.25vCPU × $0.04656 + 0.5GB × $0.00511) × 24h × 4 = $1.496 | $1.50 |
| RDS MySQL | $0.048/時間(Multi-AZ) | $0.048 × 24h = $1.152 | $1.17 |
📌 料金の注意事項:
- 上記は東京リージョン(ap-northeast-1)の2025年12月時点の料金
- データ転送料は含まれていません(別途発生)
- 最新の料金は各リンク先で確認してください
5-2. 学習用の最小構成
| リソース | 数量 | 日額費用(24h) | 月額費用 | 削減額 |
|---|---|---|---|---|
| NAT Gateway | 1(削減) | $1.50 | $45 | -$45 |
| Public ALB | 1 | $0.67 | $20 | - |
| Internal ALB | 1 | $0.67 | $20 | - |
| ECS Fargate | Front × 1 + API × 1 | $0.75 | $22.50 | -$22.50 |
| RDS MySQL | Single-AZ db.t3.micro | $0.60 | $18 | -$17 |
| 合計 | - | 約$4.19/日 | 約$125/月 | -$91 |
💰 学習用コスト計算の詳細:
| リソース | 単価 | 計算式 | 日額 |
|---|---|---|---|
| NAT Gateway | $0.062/時間 × 1 | $0.062 × 24h × 1 = $1.488 | $1.50 |
| ECS Fargate | 同上 | (0.25vCPU × $0.04656 + 0.5GB × $0.00511) × 24h × 2 = $0.748 | $0.75 |
| RDS MySQL | $0.024/時間(Single-AZ) | $0.024 × 24h = $0.576 | $0.60 |
節約のポイント:
- NAT Gatewayを1つに削減(Multi-AZを諦める)→ -$1.50/日(-$45/月)
- ECS TaskのDesired Countを1に削減→ -$0.75/日(-$22.50/月)
- RDSをSingle-AZに変更→ -$0.57/日(-$17/月)
⚠️ 学習用構成の注意事項:
- 可用性が低下します(Single Point of Failure)
- 本番環境には使用しないでください
- 学習後は必ずリソースを削除してください
5-3. 料金の最新情報について
📍 最新料金の確認方法:
各AWSサービスの料金は定期的に変更されます。最新の料金は以下の公式ページで確認してください:
| サービス | 料金ページURL |
|---|---|
| VPC(NAT Gateway) | https://aws.amazon.com/vpc/pricing/ |
| Elastic Load Balancing(ALB) | https://aws.amazon.com/elasticloadbalancing/pricing/ |
| ECS Fargate | https://aws.amazon.com/fargate/pricing/ |
| RDS for MySQL | https://aws.amazon.com/rds/mysql/pricing/ |
| CloudWatch | https://aws.amazon.com/cloudwatch/pricing/ |
| Secrets Manager | https://aws.amazon.com/secrets-manager/pricing/ |
💡 料金計算ツール:
- AWS料金計算ツール: https://calculator.aws/
- 詳細な見積もりを作成できます
- リージョン別の料金を確認できます
📅 この記事の料金基準:
- リージョン: 東京(ap-northeast-1)
- 基準日: 2025年12月
- 為替レート: 1 USD = 約150円(参考)
6. クイックスタート
「今すぐ始めたい!」という方向け:
6-1. ステップ1: 環境準備
# 必要なツールのインストール確認
terraform --version # v1.9.x以上
aws --version # AWS CLI v2.x
docker --version # v20.x以上
6-2. ステップ2: リポジトリクローン
# プロジェクトディレクトリを作成
mkdir my-ecs-project
cd my-ecs-project
# Terraformコード
mkdir terraform
cd terraform
6-3. ステップ3: 第1回から順番に読む
第1回: 構成図編 を読んで、設計を理解してから実装開始!
7. ファイル構成(完成時)
my-ecs-project/
├── .gitignore
├── README.md
│
├── terraform/ # Terraform実装(全5 Phase)
│ ├── phase1-network/ # 第2-3回で作成
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── terraform.tfvars
│ │ ├── vpc.tf
│ │ ├── subnet.tf
│ │ ├── igw.tf
│ │ ├── nat.tf
│ │ ├── route_table.tf
│ │ └── outputs.tf
│ │
│ ├── phase2-security/ # 第4-5回で作成
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── terraform.tfvars
│ │ ├── data.tf
│ │ ├── security_group.tf
│ │ ├── ecr.tf
│ │ └── outputs.tf
│ │
│ ├── phase3-ecs-front/ # 第6-7回で作成
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── terraform.tfvars
│ │ ├── data.tf
│ │ ├── alb.tf
│ │ ├── ecs_cluster.tf
│ │ ├── cloudwatch.tf
│ │ ├── iam.tf
│ │ ├── ecs_task_def.tf
│ │ ├── ecs_service.tf
│ │ └── outputs.tf
│ │
│ ├── phase4-ecs-api/ # 第8回で作成
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── terraform.tfvars
│ │ ├── data.tf
│ │ ├── alb.tf
│ │ ├── cloudwatch.tf
│ │ ├── ecs_task_def.tf
│ │ ├── ecs_service.tf
│ │ └── outputs.tf
│ │
│ └── phase5-rds/ # 第9-10回で作成
│ ├── main.tf
│ ├── variables.tf
│ ├── terraform.tfvars
│ ├── data.tf
│ ├── secrets.tf
│ ├── rds.tf
│ └── outputs.tf
│
├── front/ # Frontendイメージ(第5回で作成)
│
└── api/ # APIイメージ(第5回で作成)
📝 補足
front/ と api/ について
本シリーズはTerraformによるインフラ構築がメインのため、アプリケーションコード(HTML/CSS/JS/Go)の詳細解説は省略します。
| ディレクトリ | 内容 | 用途 |
|---|---|---|
front/ |
Nginx + 静的HTML/JS | API Test / DB Test ボタンUI |
api/ |
Go言語 API | ヘルスチェック、DB接続テスト |
⚠️ 注意: ECRにPushする前に、front/config.js の baseURL をInternal ALBのDNS名に書き換える必要があります(第7回で説明を記載)
8. マイルストーン一覧
学習の進捗を実感できるように、5つのマイルストーンを設定しています:
🎯 マイルストーン1: ネットワーク基盤完成(第3回終了時)
└─ VPC、Subnet、NAT Gateway、Route Tableが完成
🎯 マイルストーン2: セキュリティ基盤完成(第5回終了時)
└─ Security Group、ECRが完成
└─ DockerイメージのECR pushまで完了
🎯 マイルストーン3: 画面表示成功(第7回終了時)
└─ ブラウザで画面が表示される 🎉
🎯 マイルストーン4: API動作確認(第8回終了時)
└─ 「API Test」ボタンが動作する ✅
🎯 マイルストーン5: 完全動作(第10回終了時)
└─ 「Database Test」ボタンが動作する 🎉🎉🎉
└─ 全システムが完全動作!
9. 各記事へのリンク
設計編
実装編 - Phase 1: ネットワーク基盤
・第2回: VPC & Subnet - ネットワーク基盤(前半)
・第3回: NAT Gateway & Route Table - ネットワーク基盤(後半)
実装編 - Phase 2: Security & ECR
・第4回: Security Group - セキュリティ設計の基本
・第5回: ECR & Docker Image Push - コンテナレジストリ
実装編 - Phase 3: ECS Front
・第6回: Public ALB - ロードバランサーの設定
・第7回: ECS Front & IAM - Frontendコンテナの実装
実装編 - Phase 4-5: API & DB
・第8回: ECS API & Internal ALB - APIコンテナの実装
・第9回: RDS MySQL - データベースの構築
・第10回: Secrets Manager & 完成 - 機密情報管理と統合
(第1回へ続く)