Day 14: 第2週のまとめ:簡単なWebアプリをECSでデプロイしてみる 🎉
皆さん、こんにちは!30日集中講座、Day 14へようこそ。
あっという間に2週間が経ち、この講座も折り返し地点に差し掛かりました。第2週では、ローカルのDockerコンテナをAWS上で動かすための実践的なスキルを習得しましたね。
- Day 8: AWSコンテナサービス(ECS, EKS, Fargate)の概要と使い分け
- Day 9: ECSの基本構成(クラスター, タスク定義, サービス)とデプロイの流れ
- Day 10: ECRを使ったコンテナイメージの管理とプッシュ
- Day 11: ECSの実行環境(EC2 vs Fargate)の選択
- Day 12: タスク定義とサービスの作成
- Day 13: ロードバランサーとオートスケーリングの設定
今日は、これまでの学びを総動員して、Day 6で作成したPython Webアプリケーションを、ALBとオートスケーリングを備えた高可用性なECS環境にデプロイする最終演習を行います。このハンズオンを成功させれば、皆さんはAWSでコンテナを動かす基本を完全にマスターしたと言えるでしょう。
1. 今回デプロイする最終構成図
この2週間で学習した要素を組み合わせ、以下のような本番環境に近い構成を構築します。
- ECR: Day 6で作成したDockerイメージを保存
- ECS on Fargate: サーバー管理なしでコンテナを実行
- ALB: ユーザーからのトラフィックをタスクに分散し、動的なIPアドレスを解決
- Auto Scaling: CPU使用率に応じてタスク数を自動で増減
2. ハンズオン実行前の確認事項
このハンズオンをスムーズに進めるために、以下の準備が完了しているか確認してください。
- ✅ Day 6のPythonアプリケーションが手元にある。
- ✅ Docker Desktopが起動中。
- ✅ AWS CLI v2がインストール済みで、認証設定済み。
- ✅ **ECRリポジトリ「my-web-app」**が存在する。
aws ecr create-repository --repository-name my-web-app --region ap-northeast-1 - ✅ ECSクラスターが作成済み(名前:
my-clusterなど)。
3. ステップ・バイ・ステップ:総合ハンズオン
ここでは、これまでのDayで学んだ手順を統合して、一つのデプロイフローとして実行します。推定所要時間: 30-45分
ステップ1: ローカルでのイメージビルドとECRへのプッシュ(約5分)
Day 6で作成したPythonアプリケーションのディレクトリに移動し、DockerイメージをビルドしてECRにプッシュします。
# ローカルイメージをビルド
docker build -t my-web-app:latest .
# ECRへの認証情報を取得しログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com
# イメージにタグ付けしてプッシュ
docker tag my-web-app:latest <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-web-app:latest
docker push <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-web-app:latest
ステップ2: セキュリティグループの作成(約5分)
ECSタスクとALBのセキュリティを確保するため、2つのセキュリティグループを作成します。
-
ALB用セキュリティグループ:
- インバウンドルール: HTTP(80), HTTPS(443)を
0.0.0.0/0から許可。
- インバウンドルール: HTTP(80), HTTPS(443)を
-
ECSタスク用セキュリティグループ:
- インバウンドルール: カスタムTCP(5000) を ALB用セキュリティグループからのみ 許可。
- アウトバウンドルール: HTTPS(443) を
0.0.0.0/0へ許可(ECRアクセス用)。
ステップ3: タスク定義、ALB、サービス、オートスケーリングの作成(約15分)
-
タスク定義: ECSコンソールで新しいタスク定義を作成。CPU/メモリは
0.25 vCPU / 0.5 GB、イメージはECRのURI、ポートは5000を設定します。 -
ALB: EC2コンソールでALBとターゲットグループを作成。ターゲットタイプは**「IP addresses」**、ポートは
5000に設定し、ALBをパブリックサブネットに配置します。 -
サービス: ECSコンソールでサービスを作成。タスク数
2、ALBとオートスケーリングを設定します。
4. 段階的な動作確認とトラブルシューティング
すべての設定が完了すると、タスクが起動するまで2-3分かかります。その後、以下の手順で動作を確認しましょう。
✅ 動作確認のチェックリスト
- Step 1: 基本接続確認: ALBのDNS名をブラウザで開き、アプリケーションが表示されるか確認。
- Step 2: 冗長性確認: サービスで2つのタスクが起動していることを確認。
- Step 3: スケーリング確認: CloudWatchでCPU使用率のメトリクスが収集されていることを確認。
🔧 よくあるトラブルと解決策
- ALB DNSで繋がらない場合: ALBのDNS名が正しいか、ALBとECSタスクのセキュリティグループ設定を見直します。
-
タスクが
UNHEALTHYになる場合: ターゲットグループのヘルスチェック設定が正しいか、アプリケーションが正しく200 OKを返しているか確認します。 - ECRプッシュ失敗: AWS認証が切れていないか、リポジトリが存在するか確認します。
5. 第2週のまとめ
この1週間で、皆さんは以下のスキルを習得しました。
- クラウドネイティブのデプロイフロー: ローカル開発 → ECR → ECSへの一連の流れを理解しました。
- AWS主要サービスの役割: ECS, Fargate, ECR, ALB, Auto Scalingといった各サービスの位置づけを学びました。
- 高可用性とスケーラビリティの実現: 冗長性と自動スケーリングを備えた、実践的なシステムを構築しました。
これで、ローカル開発からAWS上での本番運用に近い環境まで、自分の手で一通り構築できるようになりました。これは、実際の現場でも役立つ「実践的なクラウドスキル」です。
💰 重要: ハンズオン後のクリーンアップ
削除手順(必須実行):
- ECSサービス → 必要タスク数を「0」に設定し、サービスを削除
- EC2コンソールから、ALBとターゲットグループを削除
削除しないと、ALBとFargateタスクの費用で月額約$47かかります。
次回の予告
Day 15: なぜEKSを学ぶのか?Kubernetesのアーキテクチャと概念を理解する
それでは、また明日お会いしましょう!