1
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?

「Dockerはわかるけど…」から卒業!AWSでコンテナを動かすための30日集中講座 - Day 14: 第2週のまとめ:簡単なWebアプリをECSでデプロイしてみる

Posted at

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週間で学習した要素を組み合わせ、以下のような本番環境に近い構成を構築します。

  1. ECR: Day 6で作成したDockerイメージを保存
  2. ECS on Fargate: サーバー管理なしでコンテナを実行
  3. ALB: ユーザーからのトラフィックをタスクに分散し、動的なIPアドレスを解決
  4. 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 から許可。
  • ECSタスク用セキュリティグループ:
    • インバウンドルール: カスタムTCP(5000) を ALB用セキュリティグループからのみ 許可。
    • アウトバウンドルール: HTTPS(443) を 0.0.0.0/0 へ許可(ECRアクセス用)。

ステップ3: タスク定義、ALB、サービス、オートスケーリングの作成(約15分)

  1. タスク定義: ECSコンソールで新しいタスク定義を作成。CPU/メモリは0.25 vCPU / 0.5 GB、イメージはECRのURI、ポートは5000を設定します。
  2. ALB: EC2コンソールでALBとターゲットグループを作成。ターゲットタイプは**「IP addresses」**、ポートは5000に設定し、ALBをパブリックサブネットに配置します。
  3. サービス: ECSコンソールでサービスを作成。タスク数2ALBとオートスケーリングを設定します。

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上での本番運用に近い環境まで、自分の手で一通り構築できるようになりました。これは、実際の現場でも役立つ「実践的なクラウドスキル」です。


💰 重要: ハンズオン後のクリーンアップ

削除手順(必須実行):

  1. ECSサービス → 必要タスク数を「0」に設定し、サービスを削除
  2. EC2コンソールから、ALBとターゲットグループを削除
    削除しないと、ALBとFargateタスクの費用で月額約$47かかります。

次回の予告
Day 15: なぜEKSを学ぶのか?Kubernetesのアーキテクチャと概念を理解する

それでは、また明日お会いしましょう!

1
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
1
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?