
【GenU完全攻略 #2】GenUのアーキテクチャ——全体構成とデータフローを図解する
GenUを使い始めると「CDKでデプロイしたら動いた」で終わりがちだ。
でも中で何が動いているかわからないまま使っていると、エラーが出たときに原因を追えない。コスト最適化もできない。カスタマイズもしにくい。
この記事ではGenUの全体像を構成・フローの両面から整理する。
GenUの3層構造
GenUのアーキテクチャは大きく3層に分かれる。
[フロントエンド層]
CloudFront + S3 (静的ホスティング)
Cognito (認証)
|
| HTTPS
v
[バックエンド層]
API Gateway
|
v
Lambda
|
v
[AI・データ層]
Amazon Bedrock (LLM)
Knowledge Base (RAG用)
S3 (ドキュメント保存)
DynamoDB (会話履歴)
それぞれの役割を見ていく。
フロントエンド層
CloudFront + S3でReactで作られたチャットUIを配信している。ユーザーはブラウザからCloudFrontのURLにアクセスする。
Cognitoで認証を管理している。ユーザーはCognitoのUser Poolでアカウントを持ち、ログインしないとチャット画面にアクセスできない。招待制にも設定できるので、社内向けの閉じたツールとして使える。
閉域構成の場合はCloudFront + S3ではなくALB + ECS Fargateに切り替わる。詳しくはGenUの閉域構成の記事を参照。
バックエンド層
API Gatewayがフロントエンドからのリクエストを受け取り、Lambdaに渡す。
LambdaはNode.jsで書かれており、リクエストの内容(通常チャット・RAG・Agent)に応じてBedrockへの呼び出し方を切り替える。
AI・データ層
Amazon BedrockがLLMの実体。ClaudeやLlama・Titanなどのモデルをここで呼び出す。
Knowledge BaseはRAGに使うベクトルデータベース。S3に置いたドキュメントをインデックス化して、ユーザーの質問に関連する文書を検索する。
DynamoDBには会話履歴が保存される。セッションをまたいで文脈を引き継ぐのに使われる。
デプロイ後に立ち上がるAWSリソース
npx cdk deploy を実行すると、以下のリソースが自動で作られる(主要なもののみ)。
| リソース | 用途 |
|---|---|
| CloudFront Distribution | チャットUIの配信 |
| S3 Bucket(フロントエンド) | Reactアプリのビルドファイルをホスティング |
| S3 Bucket(ドキュメント) | RAG用ドキュメントの保存先 |
| Cognito User Pool | ユーザー認証 |
| API Gateway | フロントとLambdaの橋渡し |
| Lambda(複数) | チャット・RAG・Agentの処理 |
| Bedrock Knowledge Base | RAG用ベクトル検索 |
| DynamoDB | 会話履歴の保存 |
| CloudWatch Logs | Lambdaのログ |
リソース数が多いが、CDKがすべて管理してくれるので手動で設定する必要はない。
リクエストのデータフロー
ユーザーが質問を入力してから回答が返ってくるまでの流れ。
1. ユーザーがチャットUIに質問を入力
↓
2. CloudFrontを経由してAPI Gatewayへ
↓
3. Lambdaが起動してリクエストを処理
↓
4. BedrockのAPIを呼び出し(Claude等)
↓
5. Bedrockから生成されたテキストが返る
↓
6. Lambdaがレスポンスを整形してフロントへ
↓
7. チャットUIに回答が表示される
会話履歴はステップ3でDynamoDBから取得され、過去のやり取りをBedrockに渡すことで文脈が引き継がれる。
RAGとAgentでフローがどう変わるか
通常チャット・RAG・Agentの3つでBedrockへの渡し方が異なる。
通常チャット
Lambda → Bedrock(質問をそのまま投げる)→ 回答
ドキュメント参照なし。モデルが学習済みの知識だけで回答する。
RAG
Lambda → Knowledge Base(ベクトル検索)
→ 関連ドキュメントを取得
→ Bedrock(質問 + 関連ドキュメントを投げる)
→ 回答
「登録したドキュメントをもとに答えてほしい」用途に使う。社内マニュアル・FAQ・製品ドキュメントの検索に向いている。
Agent
Lambda → Bedrock(質問を投げてツール呼び出しを判断させる)
→ Lambdaツール・APIを呼び出し
→ 結果をBedrockに返す
→ 必要なら追加でツールを呼び出す(繰り返し)
→ 最終回答
Agentは複数ステップを自律的に実行できる。「データベースを検索してメールを送る」といった複合的なタスクに向いている。
ただしステップ数が増えるほどコストと遅延が増える。RAGで解決できる問題にAgentを使う必要はない。この判断基準については後の回で詳しく扱う。
まとめ
- GenUはフロントエンド・バックエンド・AI層の3層構造
- CDKデプロイで CloudFront・Cognito・Lambda・Bedrock等が自動で立ち上がる
- 通常チャット・RAG・Agentでデータの経路が変わる
- RAGはドキュメント検索、Agentはツール実行——目的に合わせて使い分ける
構成を把握しておくとエラー発生時の原因特定が速くなる。次回はRAGのナレッジベース構築と検索の仕組みを実装ベースで解説する。
← 第1回:GenUとは?——RAG・Agent・Bedrockとの違いを整理する | 第3回:GenUの閉域構成——VPCエンドポイントでPrivate環境に閉じ込める →