4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS Puppeteer on Lambda ] ロングスクロールページをスクショする

Last updated at Posted at 2022-05-24

背景

Lambda上でPuppeteerを動かして,
指定したWebページをスクショする機能がある.

Webページの中にはものすごく長いページ(ロングスクロール)が存在する.
このようなページをスクショしようとすると下記のエラーが発生して処理が終わる.

今回, Lambda上で動くPuppeteerにおいて,
これを乗り越えてものすごく長いページでもスクショができる方法がわかったので,
同じように長いページをスクショしたい勢に向けて贈る.

対応方法

Lambdaのエフェメラルストレージを増やす

最近更新されたコメントによってエラーの詳細が明らかになった.

つまるところ, /tmpディレクトリの容量が足りてないらしい.
https://github.com/puppeteer/puppeteer/issues/5341#issuecomment-1118387787

Lambdaは最近, /tmpディレクトリの容量増やせるようになったので下記を参考にしながら増やしましょう.
https://aws.amazon.com/jp/blogs/news/aws-lambda-now-supports-up-to-10-gb-ephemeral-storage/

launchのargsにオプションを設定

実はエフェメラルストレージを増やしただけだと取れなかった.
下記のエラーが出る.
[0524/103738.281035:ERROR:tile_manager.cc(821)] WARNING: tile memory limits exceeded, some content may not draw

タイルメモリの制限を超えているらしい.

これはコメントにある通り,
launchのargsに --force-gpu-mem-available-mb を設定すると良い.
我々は下記のように設定.

module.exports = async (args) => {
    const browser = await chromium.puppeteer.launch({
        args: chromium.args.concat(['--force-gpu-mem-available-mb=4096']),
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: chromium.headless,
    });

...以下略

これで取れるようになった.

※ オプションは下記に一覧がまとまってます
https://peter.sh/experiments/chromium-command-line-switches/

最後に

あまり需要がないケースかもしれませんが,
もし困っている人がいたら参考にしていただければと.

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?