👁

応用課題

この章では、コンテナ講座で学んだ内容を応用した課題に取り組みます。

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-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 まとめ

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

応用課題の採点はプレミアムプランでご利用いただけます。

プランのアップグレード

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くのセクションが作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000