You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda中运行Puppeteer时缺失libnss3.so库的问题

问题:AWS Lambda运行Puppeteer时缺失libnss3.so共享库

我尝试用chrome-aws-lambda包在AWS Lambda上运行Puppeteer,结果启动Chromium浏览器进程失败,提示共享库libnss3.so缺失。我的Lambda函数基于Node.js,用来处理PDF,目前没配置包含额外二进制文件或库的Lambda层。我怀疑是Lambda环境缺Chromium依赖库导致的,想确认是不是没配置Lambda层的问题,以及怎么配置Lambda层来包含Puppeteer需要的库。

错误信息详情

{
  "errorType": "Error",
  "errorMessage": "Failed to launch the browser process!\n/tmp/chromium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory\n\n\nTROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md\n",
  "trace": [
    "Error: Failed to launch the browser process!",
    "/tmp/chromium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory",
    "",
    "",
    "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:197:20)",
    "    at Interface.<anonymous> (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:187:68)",
    "    at Interface.emit (node:events:526:35)",
    "    at Interface.close (node:internal/readline/interface:527:10)",
    "    at Socket.onend (node:internal/readline/interface:253:10)",
    "    at Socket.emit (node:events:526:35)",
    "    at endReadableNT (node:internal/streams/readable:1589:12)",
    "    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"
  ]
}

报错代码片段

const browser = await chromium.puppeteer.launch({
  args: chromium.args,
  defaultViewport: chromium.defaultViewport,
  executablePath: await chromium.executablePath,
  headless: chromium.headless,
  ignoreHTTPSErrors: true,
});

解答

问题原因确认

没错,就是因为未配置Lambda层导致的。AWS Lambda默认的Node.js运行时环境不包含Chromium运行所需的系统依赖库(比如libnss3.so属于NSS安全套件的一部分),chrome-aws-lambda仅提供适配Lambda的Chromium二进制文件,但其依赖的底层系统库必须通过Lambda层补充到运行环境中。

配置Lambda层的两种方法

方法一:使用预构建的现成层

直接用社区维护的适配Puppeteer的Lambda层,步骤如下:

  • 打开AWS Lambda控制台,进入你的函数页面
  • 切换到「层」标签页,点击「添加层」
  • 选择「从AWS Lambda层存储库中选择」,搜索chrome-aws-lambda或puppeteer dependencies
  • 选择与你的Node.js版本、Lambda运行时架构(x86_64/arm64)匹配的层版本,点击「添加」

方法二:手动构建自定义层

如果需要自定义依赖或找不到合适的预构建层,可手动构建:

  1. 创建临时目录,比如lambda-puppeteer-layer
  2. 在目录内创建lib文件夹(Lambda会自动加载该目录下的系统库)
  3. 基于Amazon Linux 2环境(Lambda默认运行时的基础系统)安装依赖:
    yum install -y nss libX11 libXcomposite libXcursor libXdamage libXext libXi libXrandr libXrender libXtst cups-libs libXScrnSaver pango atk gtk3
    
  4. 使用rpm -ql <包名>(比如rpm -ql nss)查询安装的库文件路径,将所有相关文件复制到lambda-puppeteer-layer/lib目录
  5. 将lambda-puppeteer-layer目录打包为zip文件(确保zip根目录直接是lib,无多余层级)
  6. 回到Lambda控制台,点击「创建层」,上传该zip文件并保存
  7. 将这个自定义层添加到你的Lambda函数中

额外注意事项

  • 确保chrome-aws-lambda版本与Lambda层中的Chromium依赖版本兼容,避免版本不匹配
  • 保持现有Puppeteer启动配置不变,chromium.args等预设参数已经适配了Lambda的环境限制(比如内存、权限)
  • Lambda内存建议至少设为512MB,Chromium运行需要足够内存,内存不足也可能导致启动失败

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:33:21