はじめに
本記事では、AWS CloudFormationを使ってECS(Fargate)とRDS(MySQL)を組み合わせたシンプルなWebアプリケーション環境を自動的に構築するテンプレートの内容を紹介します。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
開発・検証環境の立ち上げや、AWSにおけるモダンな構成の学習にも役立ちます。
書こうと思ったきっかけ
インフラのコード化(Infrastructure as Code)の学習を進める中で、CloudFormationにより自動化しています。
実際に手を動かしてテンプレートを作成することで、VPCやECS、RDSといった各リソースのつながりを深く理解することができたため、備忘録としてまとめようと思いました。
全体構成図
+--------------------------+
| AWS Infrastructure |
+--------------------------+
└─────────────────────────────────────────────┘
│ VPC (10.0.0.0/16) │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Subnet A │ │ Subnet C │ │
│ │ (Public AZ1)│ │ (Public AZ2)│ │
│ └────┬────────┘ └────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ECS Service (Fargate Tasks) │
│ - Dockerコンテナ │
│ - HTTP:8000 │
│ - 環境変数にRDSの情報を添付 │
│ │
│ ▼ ▼ │
│ RDS Subnet Group (2AZに跨る) │
│ └→ RDS MySQL │
│ - 非公開アクセス(PubliclyAccessible: false)│
│ - ECSから接続可 │
└─────────────────────────────────────────────┘
↑
Internet Gateway(パブリックサブネット経由)
主なリソースと役割
リソース名 | 説明 |
---|---|
VPC | 独自のネットワーク空間(10.0.0.0/16) |
PublicSubnet1, PublicSubnet2 | 2つのAZにまたがるパブリックサブネット |
InternetGateway, RouteTable | ECSサービスを外部と通信させるためのルート |
SecurityGroup, RDSSecurityGroup | HTTP(80,8000)とMySQL(3306)用のアクセス制御 |
MyRDS | パスワード付きMySQL RDS(パブリックアクセスなし) |
DBSubnetGroup | RDSに必要な複数AZ対応のサブネットグループ |
ECSCluster | Fargateタスクの実行先クラスター |
ECSTaskDefinition | 環境変数にRDS接続情報を含むDocker定義 |
ECSService | タスクの実行と自動再起動(Fargate) |
補足・改善ポイント
セキュリティ強化
-
MYSQL_PASSWORD
は Secrets Manager などから取得する設計が推奨です。 - RDSのポート(3306)は開発中以外では
0.0.0.0/0
にしないよう注意。
スケーリングを考慮
-
DesiredCount: 1
のままでは1インスタンスのみ。ALBを導入すれば将来的なオートスケーリングにも対応できます。
公開アクセスの調整
-
AssignPublicIp: ENABLED
は検証用としてはOK。本番ではALB経由での非公開構成が推奨。
今後追加できる構成例
追加リソース | 説明 |
---|---|
ALB (Application Load Balancer) | ECSの前段に配置。HTTPSやスケーリング対応が可能に |
Secrets Manager | DBパスワードやAPIキーを安全に管理・参照 |
CloudWatch Logs | ECSやアプリケーションのログ収集・監視 |
EFS | 状態を持つアプリケーションに便利な共有ストレージ |
Private Subnet | RDSやバックエンドアプリを非公開サブネットに配置 |
まとめ
このテンプレートは、シンプルながら拡張性のあるベース構成となっており、検証・開発環境として最適です。
本番環境へ発展させる際は、セキュリティやスケーラビリティへの配慮を加えることで、安全かつ堅牢なインフラを構築することができます。
CloudFormationを活用することで、AWSインフラの構築をスピーディかつ再現性のあるものにできるため、学習やチーム開発にも非常におすすめです!!