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

コンテナによるPDF Generatorについて

Avatar for toumakido toumakido
May 20, 2026
240

コンテナによるPDF Generatorについて

Avatar for toumakido

toumakido

May 20, 2026

Transcript

  1. © 2015 - 2026 Nowcast Inc. JAWS-UG Fin-JAWS × コンテナ⽀部

    ⾦融コンテナ⼤全 〜ビジネスから技術まで〜 コンテナによるPDF Generatorについて 2026-05-20 1
  2. © 2015 - 2026 Nowcast Inc. ⽬次 1. ⾦融業界とPDF 2.

    PDF⽣成の負荷特性 3. PDF Generatorについて 4. なぜ「コンテナ」でLambdaにデプロイするか 5. 実装上の技術的⼯夫 2
  3. © 2015 - 2026 Nowcast Inc. リクエストは周期的に集中してくる リクエスト数 時間 →

    ⽉末 ⼤量発⽣ 平時はほぼゼロ 4 ⾦融業界の書類は年次、⽉次でまとめて作成するものが多い • ⽉次レポート • 運⽤報告書
  4. © 2015 - 2026 Nowcast Inc. PDF Generator コンテナ Lambdaで稼働

    常時稼働はせず、1ファイルの⽣成を1リクエストで即時で返す Lambdaのメリット • ECSタスクと⽐べて、初回起動、スケールアウトが速い • ⼤量のリクエストが来た時に、ウォーム状態をキープしながら、並列で処理できる 5
  5. © 2015 - 2026 Nowcast Inc. Chromiumを使ったHTML→PDF変換 HTML テンプレート Chromium

    (ヘッドレス) PDF 出⼒ /main (Go binary) Chromium Playwright (Go) アーキテクチャ サブプロセス CDP (Chrome DevTools Protocol) フロー page.PDF() PDF バイト列
  6. © 2015 - 2026 Nowcast Inc. 安定したPDF⽣成のために 1 HTMLレンダリング ChromiumでHTMLを読み込む

    2 networkidle 待機 ネットワークリクエストが500ms発⽣しなくなるまで待つ→画像‧フォントのロード完了を確 認 3 CSSセレクタ出現待機 指定セレクタが現れるまで待つ→JS動的コンテンツの⽣成完了を確認 4 <img>ロード確認 全画像のロード完了をJavaScriptで確認 5 PDF出⼒ A4サイズ(297mm × 210mm)でPDF⽣成 7 PDF⽣成は5ステップの順序制御で、画像が表⽰されないPDFが⽣成されない問題を解消
  7. © 2015 - 2026 Nowcast Inc. なぜ「コンテナ」を使⽤したか 理由1: サイズ上限 デプロイ⽅式

    サイズ上限 Chromium zipデプロイ 250MB(展開後) ✗ 不可 (300〜400MB) コンテナイメージ 最⼤10GB ✓ 可能 理由2: コンテナのメリットとして、依存ライブラリを管理が楽 Dockerfile(抜粋) RUN ~/go/bin/playwright install --with-deps chromium ↑ Chromiumと依存ライブラリをイメージに焼き込み → コールドスタート時のダウンロード不要
  8. © 2015 - 2026 Nowcast Inc. 課題1:Lambdaペイロード制限 → S3中継の2段階パターン 問題:Lambda直接呼び出しのレスポンス上限は

    6MB。HTML、PDFともにこれを超える 10 クライアント 解決:S3中継 署名付きURL PDF Generator S3 署名付きURL ファイル配置 ファイル配置
  9. © 2015 - 2026 Nowcast Inc. 課題2:Chromiumのメモリリーク → コンテナ⾃殺(suicide関数) 問題:Chromiumは⻑期稼働でメモリリーク。LambdaはAWSがコンテナを管理し、直接終了できない

    解決:→ 環境変数更新という "⾃殺トリガー" で対処 起動から10分経過 ⾃分の環境変数をAPIで更新 Lambda基盤が新しいコンテナを 起動 古いコンテナが⾃然に交代 11