Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQSとPipesで回す BedrockによるPDF解析

Avatar for KURUM KURUM
October 01, 2025

SQSとPipesで回す BedrockによるPDF解析

PDF解析のUXを向上させた話

JAWS茨城でLTしてきました

https://x.com/hashtag/jawsugibaraki?src=hashtag_click

Avatar for KURUM

KURUM

October 01, 2025
Tweet

More Decks by KURUM

Other Decks in Programming

Transcript

  1. PROFILE 自己紹介 株式会社KURUM(くるむ)代表 (東京都渋谷区) 茨城県高萩市 出身 國井 弘一 くにい  こういち

    主な事業内容 WEBシステム開発 スマホアプリ開発 インフラ構築 Consulting Development Data WEBシステム開発 スマホアプリ開発 データ基盤 伴走型コンサル 2
  2. アーキテクト図 1.ファイルアップロード
 ユーザーがPresigned URLでS3に直接アップロード 2.Jobの保存 a.Auroraにジョブレコードを作成 (status=queued) 3.キューイング a.S3イベント→ SQSに

    メッセージ投入 4.キューを受け取ってバッチ実行 a.EventBridge PipesがSQSをトリガー b.ECS RunTaskを起動 5.ファイルをダウンロード a.RunTaskがS3からPDFを取得 6.解析実行 a.PDFをページ分割 → 画像化 → base64化 b.Bedrockに投げてJSONを取得 7.解析結果を保存 a.S3にJSON保存 b.Auroraに結果メタデータを登録 ECS API Aurora ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 6
  3. S3 ・Appサーバーに負荷をかけない   〇アップロード/ダウンロードは 一時URL(Presigned URL) を発行   〇クライアントが直接S3にアクセスする構成 ・データの扱い

      〇元データは そのまま保存   〇プレビュー表示用に利用 ・アクセス制御   〇アカウントIDとオブジェクトを紐づけ   〇アップロードしたユーザーのみ閲覧可能になるように調整 8
  4. EventBridgePipe 10 ・コード管理不要   〇SQS → ECS RunTaskをコードレスで接続 ・データ整形  

    〇Input Transformer でSQSメッセージを整形してECSタスクに渡せるリトライ戦略 ・リトライ戦略   〇失敗時DLQ をマネージドで提供 ・バッチサイズ・並列数でスロットリング制御   〇何件まとめて処理するかを制御   〇RunTaskの同時実行数を制限してスパイク対策 ・可観測性   〇CloudWatch Logsに自動でイベントが出る
  5. Bedrock 11 ・PDFをそのまま渡せない   〇事前に ページごとに分割   〇画像に変換 → base64化

    してモデル入力に渡す ・プロンプト設計   〇「該当項目をJSONで返すように」明確に指示   〇出力フォーマットを固定し、後段処理がしやすい形に (※テキストでjson形式で返してもらいアプリ側でdecode ) ・構造化データの抽出と   〇Claude系で構造化抽出   〇将来的に別モデルに切り替えても「抽出器」として差し替えやすい
  6. 処理のながれ - 解析実行 1.ファイルアップロード
 ユーザーがPresigned URLでS3に直接アップロード 2.Jobの保存 a.Auroraにジョブレコードを作成 (status=queued) 3.キューイング

    a.S3イベント→ SQSに メッセージ投入 4.キューを受け取ってバッチ実行 a.EventBridge PipesがSQSをトリガー b.ECS RunTaskを起動 5.ファイルをダウンロード a.RunTaskがS3からPDFを取得 6.解析実行 a.PDFをページ分割 → 画像化 → base64化 b.Bedrockに投げてJSONを取得 7.解析結果を保存 a.S3にJSON保存 b.Auroraに結果メタデータを登録 ECS API Aurora ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 13
  7. 処理のながれ - 実行の状態確認 2.Jobの状態取得 1.ジョブの実行状態確認 フロントエンドからAPIを 定期的にポーリング ECS API Aurora

    ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 14
  8. 処理のながれ - 解析実行 3. S3からPDF取得
 Presigned URLを発行して、元のPDFや 解析結果ファイルを取得 2.解析結果の取得 Auroraに保存されたメタデータ

    (S3キー、JSON結果など)を取得 ECS API Aurora ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 15 1.ジョブの実行結果取得
  9. 実現できたこと ・ユーザーUX向上   〇時間のかかる解析処理でも、進行状況をリアルタイムに表示   〇Bedrockの制約(同時実行や処理時間)に引っ張られず安定稼働 ・堅牢な基盤   〇SQSでエラー時リトライをアプリから切り離し  

    〇S3のPresigned URLで安全に直接アップロード/ダウンロード   〇システムに負荷をかけずに重いファイル転送を実装 17 ・既存システムの流用   〇SQSだとLambdaと連携することが多いイメージだが、Pipesを使うことで     既存ECSタスクと連携することができた
  10. ハマったポイント ・EventBridge Pipes   〇ECS RunTaskの詳細設定は マネコンから直接できない   〇CLI/IaC(CloudFormationやTerraform)で更新必須 ・RunTask起動のパラメータ調整

      〇cpu / memory / networkConfiguration を誤ると起動失敗   〇IAMロール(実行ロール/タスクロール)の混同に注意 ・ローカル環境での開発   〇LocalStackのSQSのキューのサブスクライブはLambdaしか対応してないので再現が難しい   〇SQSをポーリングしてdocker runをしてバッチコンテナを起動することで対応   〇本番ECSでのECS Run Taskの起動引数はEventBridgePipeのトランスフォームでSQSの
     メッセージを加工調整できるためこの辺の環境差異で問題が起きることはない 19