応用課題
この章では、コンテナ講座で学んだ内容を応用した課題に取り組みます。
1. 課題の概要
この講座で学んだ内容をもとに、シンプルなタスク管理APIをコンテナ化し、Docker Composeでローカル起動できる状態にした上で、AWS ECS/Fargate にデプロイします。
アプリケーション本体は配布するものを使用します。コンテナ化(Dockerfile・Docker Compose)とAWSデプロイ(ECR・ECS/Fargate)の部分に集中して取り組みます。
2. 事前準備
2.1 前提となる講座
この章では、以下の知識を前提としています。自信がない場合は先に関連講座を実施してみましょう。
| 講座名 | 必要な知識 |
|---|---|
| Git入門 | リポジトリ作成、コミット、Pushなど、Gitの基本操作 |
2.2 サンプルアプリケーションのダウンロード
zipには FastAPI + SQLAlchemy で実装されたシンプルなタスク管理APIが入っています。アプリケーションは DATABASE_URL 環境変数で接続先のMySQLを指定する設計になっています。
2.3 必要なツール
この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。
| ツール名 | 関連箇所 | 理由 |
|---|---|---|
| Visual Studio Code | Visual Studio Codeのインストール | 応用課題のコードを記述するエディタとして使用する |
| Docker Desktop | Docker Desktopのインストール | サンプルアプリケーションのコンテナイメージをビルドするために使用する |
| AWS CLI | AWS CLIのインストール | ECRへのイメージPushやAWSリソース操作に使用する |
| Git | Git/GitHubのセットアップ | ソースコードのバージョン管理に使用する |
2.4 必要なアカウント
この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。
| アカウント名 | 関連箇所 | 理由 |
|---|---|---|
| AWSアカウント | AWSアカウントの作成 | ECSやFargateなどのAWSリソースを構築する環境として使用する |
| GitHubアカウント | Git/GitHubのセットアップ | ソースコードのホスティング先として使用する |
3. 必須要件
3.1 Dockerfile
サンプルアプリケーションを本番運用想定でコンテナ化するDockerfileを作成すること。以下の観点を満たすこと。
- マルチステージビルドを使用し、最終イメージにビルドツールや開発用依存が残らない構成にすること
- 実行ユーザを非rootユーザに切り替えていること
- ベースイメージは公式の軽量イメージ(例:
-slim、-alpine、distrolessなど)を選定していること WORKDIR・COPY・EXPOSE・CMD(または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、.dockerignore、docker-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 まとめ
実装中に苦労したこと、工夫したこと、学んだことを記載してください。