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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
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