中間課題
この章では、AWS講座の前半で学んだ内容を応用した中間課題に取り組みます。
1. 課題の概要
VPC・EC2・ELB・オートスケーリング・IAM を組み合わせて、シンプルな Web API をデプロイするインフラを構築します。
サンプルアプリケーションは、Python の FastAPI で実装した、シンプルな文字列を返すAPIです。これを AWS 上にデプロイし、ロードバランサ経由でアクセスできる可用性の高い構成を作ることが本課題のゴールです。
構成は以下のとおりです。
- ALB(Application Load Balancer)+ EC2(Amazon Linux 2023)でAPIを動かす
- Auto Scaling Group で EC2 を複数台構成にし、可用性を確保する
- IAM でリソースへのアクセス制御を適切に設定する
2. 事前準備
2.1 サンプルアプリケーションのダウンロード
本課題で使用するサンプルアプリケーションのソースコードを以下からダウンロードしてください。
zip には、EC2上での環境構築を自動化するシェルスクリプト(setup.sh)と README が同梱されています。
2.2 必要なツール
この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。
| ツール名 | 関連箇所 | 理由 |
|---|---|---|
| Visual Studio Code | Visual Studio Codeのインストール | サンプルアプリケーションの編集に使用する |
2.3 必要なアカウント
この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。
| アカウント名 | 関連箇所 | 理由 |
|---|---|---|
| AWSアカウント | AWSアカウントの作成 | AWSリソースを構築する環境として使用する |
3. 必須要件
3.1 ネットワーク(VPC)
- VPC内に Public Subnet と Private Subnet を、2つ以上の AZ に分散配置する
- インターネットゲートウェイ・NAT ゲートウェイなど、外部通信に必要なリソースを適切に配置する
3.2 ロードバランサ(ALB)
- Public Subnet に ALB(Application Load Balancer)を配置する
- ALB のリスナーは HTTP:80 を受けて、ターゲットグループに転送する
- ALB 経由で HelloWorld API のエンドポイントにアクセスできるようにする
3.3 コンピュート(EC2 + Auto Scaling)
- Private Subnet に EC2 インスタンス(Amazon Linux 2023)を配置し、FastAPIアプリケーションを動作させる
- Auto Scaling Group を構成し、複数台の EC2 を ALB ターゲットグループに自動登録する
- 1台の EC2 を手動終了した場合に、Auto Scaling が自動で新しいインスタンスを起動して復旧すること
3.4 IAM
- EC2 にアタッチする IAM ロールで、必要最小限の権限を付与する(SSM 接続、CloudWatch Logs への書き込みなど、運用に必要なもののみ)
3.5 セキュリティグループ
- ALB・EC2 間および外部からの通信を、セキュリティグループで適切に制御する
3.6 サンプルアプリケーションのセットアップ
helloworld-api.zip を展開すると現れる setup.sh を EC2 上で実行することで、Python・依存パッケージのインストールから FastAPI アプリケーションの systemd サービス化・起動までが完結します。具体的な実行手順は同梱の README を参照してください。
セットアップ済みの EC2 から AMI を作成し、その AMI を Auto Scaling の起動テンプレートに指定する方法 が一般的です。新規に起動するインスタンスがセットアップ済みの状態で立ち上がり、ALB にすぐに参加できます。
4. 提出形式
以下の4項目をまとめて提出してください。本文はマークダウンで記載し、構成図・スクリーンショットは画像として添付してください。
4.1 概要
実装した範囲を簡潔に記載してください。
4.2 構成図
構築した AWS 構成を示す構成図を画像で添付してください。
- 必須要件で構築するすべてのリソース(VPC、Public/Private Subnet、ALB、EC2、Auto Scaling Group など)を含めること
4.3 スクリーンショット
以下のスクリーンショットを画像で添付してください。
インフラ構成
- VPC の Subnet 一覧(Public/Private が AZ 分散で構成されていることが確認できる画面)
- ALB の詳細画面(Public Subnet 配置とターゲットグループの設定が確認できる画面)
- EC2 インスタンス一覧(Private Subnet に複数台配置されていることが確認できる画面)
- Auto Scaling Group の詳細画面(起動テンプレート・ターゲットグループの設定が確認できる画面)
- セキュリティグループの設定(ALB・EC2 のインバウンドルールが確認できる画面)
アプリケーションの動作
- ALB エンドポイントにアクセスして HelloWorld API のレスポンス(例:
{"message":"Hello, World!"})が返っている画面 - ALB エンドポイントにアクセスして
/healthが{"status":"ok"}を返している画面 - Auto Scaling の動作確認(EC2 を1台手動終了して、自動で新規インスタンスが起動される流れが確認できる画面)
4.4 まとめ
実装中に苦労したこと、工夫したこと、学んだことを記載してください。