AWS SAP 模擬試験
システム構成(アーキテクチャ)の紹介
アーキテクチャ図
本アプリは AWS CDK(TypeScript)で構築した 2 つのスタックでデプロイしています。 CloudFront に設定する ACM 証明書は us-east-1 リージョンでの発行が必須のため、 証明書だけを別スタック(SapExamAppCertStack)に分離しています。
実線はリクエストの流れ(青: 静的配信、緑: 認証、茶: 履歴 API)、グレーの破線は設定上の参照・検証の関係を表します。
図は AWS 公式アイコン(diagrams パッケージ)で生成しています。
構成要素
| サービス | 役割 |
|---|---|
| Amazon Route 53 | パブリックホストゾーン sstosh.people.aws.dev を管理。exam.sstosh.people.aws.dev のエイリアス A/AAAA レコードで CloudFront へ名前解決します。 |
| Amazon CloudFront | ACM 証明書を使った HTTPS 配信(HTTP/2・HTTP/3 対応、HTTP は HTTPS へリダイレクト)。オリジンは S3 です。 |
| Amazon S3 | HTML/JS/CSS・問題データ・図などの静的サイト一式を格納。パブリックアクセスは全ブロックし、CloudFront からの OAC(Origin Access Control)経由でのみ取得できます。 |
| Amazon Cognito | User Pool によるログイン認証。ブラウザから USER_PASSWORD_AUTH フローで ID トークン(JWT)を取得します。 |
| Amazon API Gateway | HTTP API として GET /history と POST /answers を提供。JWT オーソライザーで Cognito のトークンを検証します。 |
| AWS Lambda | Node.js で回答履歴 API を実装しています。 |
| Amazon DynamoDB | ユーザーごと・問題ごとの回答履歴(直近5回分)を保存。PK: userId、SK: questionId のオンデマンド課金テーブルです。 |
| AWS Certificate Manager | exam.sstosh.people.aws.dev のパブリック証明書を DNS 検証で発行。CloudFront 用証明書は us-east-1 での発行が必須のため、別スタック(SapExamAppCertStack)で管理しています。 |
データの流れ
- 静的配信: ブラウザ → ① Route 53 で名前解決 → ② CloudFront(HTTPS / ACM 証明書)→ ③ OAC 経由で S3 から取得
- 認証: ブラウザ → Cognito にログインして ID トークン(JWT)を取得
- 履歴 API: ブラウザ →(JWT 付き)→ API Gateway(JWT 検証)→ Lambda → DynamoDB