Step6: コンテナ2
このStepでは、AWS でコンテナを運用する方法(ECR・ECS/Fargate など)を学び、Step 5 でコンテナ化した sns-camp-api をコンテナ実行環境で動かします。
1. 講座の履修
コンテナ講座 の以下の章を実施してください。すでに同等の知識がある場合は、講座の履修はスキップしても構いません。
2. 課題の実施
2.1 目的・背景
Step 5 で作成した Dockerfile を活用し、sns-camp-api をコンテナレジストリにプッシュしたうえで、コンテナ実行環境で動かします。Step 1・Step 2 で組み立てた EC2 ベースの構成から、コンテナベースの運用に切り替えることで、可用性・スケーラビリティを保ったままアプリケーションのデプロイ手順をシンプルにすることが目標です。
2.2 実施要件
使用するサンプルアプリケーション
Step 5 で Dockerfile 化した sns-camp-api を使用してください。
データベース
Step 2(クラウド2)で構築した RDS を使用してください。Step 5 では Docker Compose 内の DB コンテナを使いましたが、本 Step ではクラウド上の RDS に接続する形になります。
コンテナレジストリ
sns-camp-api のコンテナイメージをコンテナレジストリにプッシュしてください。
コンテナ実行環境
sns-camp-api をコンテナ実行環境で動作させ、インターネット経由でアクセスできる状態にしてください。
ロードバランサー
ALB(Application Load Balancer)を配置し、インターネットからのトラフィックをコンテナに振り分けてください。ALB のヘルスチェック機能で異常なコンテナを自動的に切り離す構成にしてください。
可用性
一部のコンテナに障害が起きても、継続的に API が応答できるようにしてください。
スケーリング
需要の変動に合わせて、コンテナの数を自動で増減できるようにしてください。目安として、以下の数値要件を満たすようにしてください。
- 最小コンテナ数: 2
- 最大コンテナ数: 6
- スケールアウトの契機: CPU 使用率が 70% を超えたとき
- スケールインの契機: CPU 使用率が 30% を下回ったとき
フロントエンドのデプロイ(任意)
Step 2 で Amplify や CloudFront + S3 を採用して sns-camp-front を既にデプロイ済みの場合は、そちらを継続して使用してください。まだデプロイしていない場合は、sns-camp-api と同様に sns-camp-front もコンテナ化・レジストリへのプッシュ・コンテナ実行環境へのデプロイを行い、インターネットからアクセスできる状態にしてください。
2.3 判定基準
動作確認
デプロイ後の公開 URL に対して、以下の 3 つの curl コマンドで動作を確認してください。
まず sns-camp-api の疎通確認用エンドポイント GET /health を呼び出します。
curl -i https://<公開URL>/health
以下のようなレスポンスが返ります。
HTTP/1.1 200 OK
Content-Type: application/json
{"status": "ok"}
続いて、POST /api/v1/auth/register でユーザを登録し、API 経由で DB に読み書きできることを確認します。
curl -i -X POST https://<公開URL>/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"username": "yamada", "email": "yamada@example.com", "password": "password123", "display_name": "山田太郎"}'
以下のようなレスポンスが返ります。
HTTP/1.1 201 Created
Content-Type: application/json
{"data": {"token": "eyJ...", "user": {"id": 1, "username": "yamada", ...}}}
最後に、登録レスポンスに含まれる token を使って GET /api/v1/auth/me を呼び出し、登録したユーザ情報を取得できることを確認します。
curl -i https://<公開URL>/api/v1/auth/me \
-H "Authorization: Bearer <登録レスポンスの token>"
以下のようなレスポンスが返ります。
HTTP/1.1 200 OK
Content-Type: application/json
{"data": {"id": 1, "username": "yamada", "email": "yamada@example.com", "display_name": "山田太郎", ...}}
sns-camp-front も本Stepでコンテナ実行環境にデプロイした場合は、その公開 URL をブラウザで開き、画面が表示されることを確認してください。
机上確認
以下の内容について、実際の設定画面などを確認し、それがわかるスクリーンショットを取得してください。
- 可用性: 1つのコンテナに障害が起きた場合に、どのように処理が継続されるか
- スケーリング: 需要が増減した場合にどのようにコンテナの数が増減するか(想定するスケール条件とあわせて)
2.4 課題提出
下記内容を提出フォームより提出してください(提出はプレミアムプランでご利用いただけます)。
| 項目 | 内容 |
|---|---|
| 概要 | 今回追加した構成の特徴・採用したサービスを簡潔に記載する |
| インフラ構成図 | Step 5 の構成を発展させたインフラ構成図を画像ファイルとして添付する |
| 動作確認 | デプロイ後の URL に対する 3 つの curl コマンドの実行結果を記載する |
| 机上確認 | 可用性・スケーリングそれぞれの設定がわかる画面のスクリーンショットを添付し、なぜ合格基準を満たしているかを記載する |
| まとめ | 構築中に苦労したこと、工夫したこと、学んだことを記載する |