応用課題

1. 課題の概要

この章で学んだ内容をもとに、シンプルなタスク管理APIをコンテナ化し、Docker Composeでローカル起動できる状態にした上で、AWS ECS/Fargate にデプロイします。

アプリケーション本体は配布するものを使用します。コンテナ化(Dockerfile・Docker Compose)とAWSデプロイ(ECR・ECS/Fargate)の部分に集中して取り組みます。

2. 事前準備

Gitの基礎知識を習得していることを前提とします。自信のない方は先に以下の講座を実施してください。

2.1 サンプルアプリのダウンロード

zipには FastAPI + SQLAlchemy で実装されたシンプルなタスク管理APIが入っています。アプリは DATABASE_URL 環境変数で接続先のMySQLを指定する設計になっています。

2.2 必要なツール

3. 必須要件

3.1 Dockerfile

サンプルアプリを本番運用想定でコンテナ化するDockerfileを作成すること。以下の観点を満たすこと。

  • マルチステージビルドを使用し、最終イメージにビルドツールや開発用依存が残らない構成にすること
  • 実行ユーザを非rootユーザに切り替えていること
  • ベースイメージは公式の軽量イメージ(例: -slim-alpinedistrolessなど)を選定していること
  • WORKDIRCOPYEXPOSECMD(または ENTRYPOINT)を適切に設定していること

3.2 .dockerignore

ビルドコンテキストから不要なファイルを除外する .dockerignore を作成すること。

3.3 Docker Compose

ローカルで動作確認できる docker-compose.yml を作成すること。

  • FastAPI アプリのコンテナと、MySQL のコンテナを定義していること
  • docker compose up でアプリが起動し、FastAPI から MySQL に接続してデータを操作できること
  • アプリの環境変数(DATABASE_URL)は Compose の environment または env_file で設定していること

3.4 ECS/Fargate へのデプロイ

ローカルで動いたアプリをAWS上にデプロイすること。

  • VPCを作成し、2つのアベイラビリティゾーンにパブリックサブネットとプライベートサブネットを配置(マルチAZ構成)
  • ECRリポジトリにコンテナイメージをpushし、ECSタスク定義から参照していること
  • ECSクラスタを作成し、Fargate起動タイプでタスクを実行していること
  • ECSタスクはプライベートサブネットに配置されていること
  • ALBをパブリックサブネットに配置し、ECSサービスへルーティングしていること
  • RDS(MySQL 8.x)をプライベートサブネットに配置し、ECSタスクから接続できるようにすること
  • RDS用のセキュリティグループで、ECSタスクからの接続のみ許可していること
  • ALBのDNS名から /tasks にアクセスし、APIが動作することを確認できること

4. 発展課題(任意)

4.1 Secrets Managerで機密情報を管理する

  • DB接続情報(DATABASE_URL)を AWS Secrets Manager または Systems Manager Parameter Store で管理し、ECSタスク定義から参照する

4.2 HTTPS化

  • Route53で独自ドメインを設定する
  • ACMでSSL証明書を発行し、ALBでHTTPS化する

4.3 Auto Scaling

  • ECSサービスに Auto Scaling を設定する(CPU使用率などをトリガー)

4.4 IAMロールの分離

  • タスクロール(アプリから他AWSサービスへのアクセス用)と タスク実行ロール(ECS Agent がイメージpull やログ出力するための権限)を分離する

5. 提出形式

5.1 GitHubリポジトリ

実装したコード(Dockerfile、.dockerignoredocker-compose.yml、アプリケーション一式)をアップロードしたGitHubリポジトリのURLを記載してください。

5.2 スクリーンショット

以下のスクリーンショットを添付してください。

ローカル動作確認

  • docker compose up でコンテナが起動している画面(または docker ps でコンテナが動作している画面)
  • ローカルから curl http://localhost:8000/tasks などでAPIが動作している画面

AWS デプロイ確認

  • ECRリポジトリにイメージがpushされている画面
  • ECSサービスでタスクが実行中(RUNNING)の画面
  • ALBのDNS名から /tasks にアクセスしてAPIが動作している画面

5.3 まとめ

実装中に苦労したこと、工夫したこと、学んだことを記載してください。

応用課題の採点はライトプラン以上でご利用いただけます。

プランのアップグレード