エンタープライズ向け情報収集・要約AIシステムの開発と、PoCのフロントエンド実装。障害の根本原因特定、クローラー信頼性改善、非同期アーキテクチャへの移行など。
エンタープライズ向けの情報収集・要約AIシステムの開発に参加しました。複数の公開サイトに分散している情報を自動クローリングで集め、PDFやHTMLからテキストを抽出して、AWS Bedrock (Claude) で要約レポートを生成してメール配信するシステムです。期間は短めで、やったことの大半はバックエンドの障害調査と改善です。
504 Gateway Timeout 障害の根本原因特定
URL登録時にAPIが504を返す障害があり、その調査を担当しました。仮説を立てて段階的に切り分けていきました。
- まずJWKS取得(認証)のタイムアウトを疑い、取得タイムアウトを短縮 → 再発
- 次にDB接続プールを疑い、NullPoolとQueuePoolの切り替えやpool_timeoutを調整 → 再発
- asyncpgに
command_timeoutを入れて診断ログを仕込んだところ、クエリ実行そのものがハングしていると判明
最終的に、Aurora Serverless v2 が低ACU(0.5)までスケールインした状態でクエリ処理がハングするのが根本原因だと確定しました。対策として command_timeout の設定、最小ACUの引き上げ、フロント側のリトライを提案し、一連の流れを調査レポートにまとめて納品しています。
URLインポートの非同期化
PDFのインポートが同期処理でタイムアウトの温床になっていたため、EventBridge + Lambda の非同期構成に移し、さらに実行時間の制約から ECS Fargate に移行しました。途中、Lambdaがモジュール未同梱と環境変数不足で全滅していた問題も特定しています(デプロイCIのRevert放置が原因でした)。
クローラーの信頼性改善
- iframe / embed / object の中にあるPDFの検出
- HTMLの取得制限を広げつつ、メインコンテンツを優先して抽出する処理
- クエリ文字列付きPDF URLの判定修正、開催スケジュール抽出の改善
「未来の開催予定を検知して当日に再クロールする」という追加要望については、既存のバッチ設計で既に実現されていることを調査で示し、追加実装なしで済ませました。作らずに済むことを示すのも調査の仕事のうちです。
PoCのフロントエンド実装
別案件として、チャットボットとファイルストレージ管理を中心にした画面一式のPoCを単独で実装しました。実働1週間ほどの短期案件です。
- TOP画面、ファイルアップロード画面、ドキュメント一覧、チャットボット画面、チャット一覧をNext.js (Pages Router) で実装
- 提供された開発ガイドを読み込み、画面仕様書に沿ってUIを書き出した
- PoCのゴールが「動く画面で仕様の妥当性を確認すること」だったので、API結合はせずモックで動くプロトタイプとして納品。機能要件書に画面ごとの工数見積も記載した
短期のPoCは「どこまで作らないか」の判断が全てで、この案件ではモック納品と割り切ったことで1週間に収まりました。
使った技術
- Python / FastAPI / SQLAlchemy (async) / Alembic
- AWS (Bedrock / Lambda / ECS Fargate / Aurora PostgreSQL Serverless v2 / EventBridge / SES)
- Terraform
- Next.js / TypeScript / Tailwind CSS