Error: Failed to launch the browser process! の解決方法
@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
Puppeteerのどこかのissueでメモリ不足の可能性ありとの情報。
RAM 256MB, エフェメラルストレージが512MBだったのでそれぞれ2048MBに拡張。
特に効果なし
問題切り分けのため、/tmp/chromium
に圧縮されたChromiumが解凍されているのか、console.log()
を多用して検証。
ファイルは正常に存在した。
エラーを素直に理解すれば、 実行ファイル(バイナリ)が見つからないとのことなのでPuppeteer側が認識できていない可能性も考え始める。
しかし、あまり有力な情報は見つけられず。。。。
そこで、エラー文を読み返してみるとCan't
なので、ファイルが見つからない以外の原因として、実行できない形式のバイナリが渡されている。すなわち自分のchromium.zip
の生成方法が悪い?と考え始める。
(所要によりmake chromium.zip
をApple Silicon上のmacOSで行っていた。
@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へと変更すると無事成功した。
Q
上記コマンドの、 --compatible-runtimes nodejs
は、前提条件の Node.js 16, 18
と異なりますが、そこは問題とは関係しないのですか?
A
検証してみた範囲内では、 nodejs
ではなく、(WEBコンソール経由で)Node.jsの16や18を使っても実行には成功したので、(この件とは直接的に)関係しないと考えてみて良いと思います。