Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SQSとPipesで回す BedrockによるPDF解析
Search
KURUM
October 01, 2025
Programming
0
110
SQSとPipesで回す BedrockによるPDF解析
PDF解析のUXを向上させた話
JAWS茨城でLTしてきました
https://x.com/hashtag/jawsugibaraki?src=hashtag_click
KURUM
October 01, 2025
Tweet
Share
More Decks by KURUM
See All by KURUM
Pythonではじめる機械学習(教師あり学習)
kuniiskywalker
0
590
Other Decks in Programming
See All in Programming
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
630
20260315 AWSなんもわからん🥲
chiilog
2
170
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
390
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
220
PHPで TLSのプロトコルを実装してみる
higaki_program
0
360
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
320
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
610
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
450
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
650
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
240
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
350
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
260
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
260
Agile that works and the tools we love
rasmusluckow
331
21k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
570
AI: The stuff that nobody shows you
jnunemaker
PRO
3
460
WCS-LA-2024
lcolladotor
0
490
Site-Speed That Sticks
csswizardry
13
1.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
310
KATA
mclloyd
PRO
35
15k
How STYLIGHT went responsive
nonsquared
100
6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
130
Paper Plane (Part 1)
katiecoart
PRO
0
5.8k
Facilitating Awesome Meetings
lara
57
6.8k
Transcript
SQSとPipesで回す BedrockによるPDF解析 PDF解析のUXを向上させた話 株式会社KURUM(くるむ) 公式キャラクター くるむセンパイ
PROFILE 自己紹介 株式会社KURUM(くるむ)代表 (東京都渋谷区) 茨城県高萩市 出身 國井 弘一 くにい こういち
主な事業内容 WEBシステム開発 スマホアプリ開発 インフラ構築 Consulting Development Data WEBシステム開発 スマホアプリ開発 データ基盤 伴走型コンサル 2
自己紹介 3 茨城県高萩市の 海の近くで育ちました 最近、映えスポットに なってるみたいです
自己紹介 4 高校時代に水戸のライトハウスで ライブやりました 最近もたまに練習だけしてます
今日話すこと 5 課題①: オンデマンドにLLMで画像解析を行うと、処理時間・同時実行数の問題がある 課題②: ユーザーに解析状態や結果をストレスなく表示する必要がある キューイング機構+ジョブ管理+ECS RunTask+Bedrock 解決策
アーキテクト図 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
7 主要コンポーネントの設計ポイント
S3 ・Appサーバーに負荷をかけない 〇アップロード/ダウンロードは 一時URL(Presigned URL) を発行 〇クライアントが直接S3にアクセスする構成 ・データの扱い
〇元データは そのまま保存 〇プレビュー表示用に利用 ・アクセス制御 〇アカウントIDとオブジェクトを紐づけ 〇アップロードしたユーザーのみ閲覧可能になるように調整 8
Aurora 9 ・ジョブ状態管理 〇受付→実行中→成功/失敗。再実行やDLQ再投入時も冪等に追跡。 ・結果保存 〇S3の場所と要約/抽出値をメタデータ(JSON)で保持(本体はS3のまま)。 〇ページ単位の解析結果を保持。
〇解析不能ページの場合はエラー内容を格納することで再実行やトラブルシュートを容易化。
EventBridgePipe 10 ・コード管理不要 〇SQS → ECS RunTaskをコードレスで接続 ・データ整形
〇Input Transformer でSQSメッセージを整形してECSタスクに渡せるリトライ戦略 ・リトライ戦略 〇失敗時DLQ をマネージドで提供 ・バッチサイズ・並列数でスロットリング制御 〇何件まとめて処理するかを制御 〇RunTaskの同時実行数を制限してスパイク対策 ・可観測性 〇CloudWatch Logsに自動でイベントが出る
Bedrock 11 ・PDFをそのまま渡せない 〇事前に ページごとに分割 〇画像に変換 → base64化
してモデル入力に渡す ・プロンプト設計 〇「該当項目をJSONで返すように」明確に指示 〇出力フォーマットを固定し、後段処理がしやすい形に (※テキストでjson形式で返してもらいアプリ側でdecode ) ・構造化データの抽出と 〇Claude系で構造化抽出 〇将来的に別モデルに切り替えても「抽出器」として差し替えやすい
12 処理の流れ
処理のながれ - 解析実行 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
処理のながれ - 実行の状態確認 2.Jobの状態取得 1.ジョブの実行状態確認 フロントエンドからAPIを 定期的にポーリング ECS API Aurora
ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 14
処理のながれ - 解析実行 3. S3からPDF取得 Presigned URLを発行して、元のPDFや 解析結果ファイルを取得 2.解析結果の取得 Auroraに保存されたメタデータ
(S3キー、JSON結果など)を取得 ECS API Aurora ジョブのステータス管理、 解析結果管理 ECS バッチ Bedrock S3 PDF保管用ストレージ SQS EventBridgePipe 15 1.ジョブの実行結果取得
16 まとめ
実現できたこと ・ユーザーUX向上 〇時間のかかる解析処理でも、進行状況をリアルタイムに表示 〇Bedrockの制約(同時実行や処理時間)に引っ張られず安定稼働 ・堅牢な基盤 〇SQSでエラー時リトライをアプリから切り離し
〇S3のPresigned URLで安全に直接アップロード/ダウンロード 〇システムに負荷をかけずに重いファイル転送を実装 17 ・既存システムの流用 〇SQSだとLambdaと連携することが多いイメージだが、Pipesを使うことで 既存ECSタスクと連携することができた
実現できたこと 従来OCR フォーマット依存 帳票ごとにレイアウトを定義しないと正しく認識できない。 文書種別の判定が困難 「それが目的の書類かどうか」といった文書分類までは行えない。 学習・準備コストが高い 機械学習ベースのアプローチもあるが、大量の教師データ準備や学習コストがかかる。 18 ・Bedrockによる開発工数の圧縮
ハマったポイント ・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
今後の課題 20 ・Job管理のスケール 〇Auroraで高頻度ポーリングしているため、DynamoDBやKVSへの移行検討余地あり ・ユーザー通知改善 〇完了時に Push通知 で即時伝える仕組みを導入
〇結果の画面反映を WebSocket化してストレスフリーに
\ ご清聴ありがとうございました / 21