Closed6

Error: Failed to launch the browser process! の解決方法

kyoya0819kyoya0819

@sparticuz/chromiumを使用していたところ以下のようなエラーに遭遇。

{
  "errorType": "Error",
  "errorMessage": "Failed to launch the browser process!\n/tmp/chromium: /tmp/chromium: cannot execute binary file\n\n\nTROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md\n",
  "trace": [
    "Error: Failed to launch the browser process!",
    "/tmp/chromium: /tmp/chromium: cannot execute binary file",
    "",
    "",
    "TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md",
    "",
    "    at onClose (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:194:20)",
    "    at Interface.<anonymous> (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:184:68)",
    "    at Interface.emit (node:events:539:35)",
    "    at Interface.close (node:readline:586:8)",
    "    at Socket.onend (node:readline:277:10)",
    "    at Socket.emit (node:events:539:35)",
    "    at endReadableNT (node:internal/streams/readable:1345:12)",
    "    at processTicksAndRejections (node:internal/process/task_queues:83:21)"
  ]
}

環境

  • Lambda
    • Node.js ... 16
    • RAM ... 256MB
    • エフェメラルストレージ ... 512MB
    • Architecture ... arm64
    • パッケージ周り
      • @sparticuz/chromium ... 109.0.1
      • puppeteer-core ... 19.4.1
  • Lambda Layer
    • Node.js ... 16, 18
    • Architecture ... arm64, x86_64
kyoya0819kyoya0819

Puppeteerのどこかのissueでメモリ不足の可能性ありとの情報。
RAM 256MB, エフェメラルストレージが512MBだったのでそれぞれ2048MBに拡張。

特に効果なし

kyoya0819kyoya0819

問題切り分けのため、/tmp/chromiumに圧縮されたChromiumが解凍されているのか、console.log()を多用して検証。

ファイルは正常に存在した。

kyoya0819kyoya0819

エラーを素直に理解すれば、 実行ファイル(バイナリ)が見つからないとのことなのでPuppeteer側が認識できていない可能性も考え始める。
しかし、あまり有力な情報は見つけられず。。。。

そこで、エラー文を読み返してみるとCan'tなので、ファイルが見つからない以外の原因として、実行できない形式のバイナリが渡されている。すなわち自分のchromium.zipの生成方法が悪い?と考え始める。
(所要によりmake chromium.zipをApple Silicon上のmacOSで行っていた。

kyoya0819kyoya0819

@sparticuz/chromiumのREADMEのデプロイコマンドを確認。
(実は所用により、make chromium.zip以降のAWSへのデプロイ作業はこれまで全て手動で行なっていた。

aws lambda publish-layer-version --layer-name chromium --description "Chromium v${versionNumber}" --content "S3Bucket=${bucketName},S3Key=chromiumLayers/chromium${versionNumber}.zip" --compatible-runtimes nodejs --compatible-architectures x86_64

最後のこのフラグを見つけて「--compatible-architectures x86_64」虚無の顔をしていた(?

その後、Lambda(とおそらく必要ないがLambda Layer)の アーキテクチャをarm64からx86_64へと変更すると無事成功した。

kyoya0819kyoya0819

Q

上記コマンドの、 --compatible-runtimes nodejs は、前提条件の Node.js 16, 18 と異なりますが、そこは問題とは関係しないのですか?

A

検証してみた範囲内では、 nodejs ではなく、(WEBコンソール経由で)Node.jsの16や18を使っても実行には成功したので、(この件とは直接的に)関係しないと考えてみて良いと思います。

このスクラップは2023/01/14にクローズされました