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

在AWS Lambda中使用Puppeteer实现HTML转PDF的问题求助

Node.js 16 AWS Lambda环境下Puppeteer生成PDF失败问题解决建议

在Node.js 16的AWS Lambda环境中使用Puppeteer进行HTML转PDF时遇到稳定性问题,本地及常规服务器环境运行正常,但部署到无服务器环境后无法正常启动Chromium,尝试过puppeteer、chrome-aws-lambda等库仍未解决。以下是代码及报错信息:

我的代码

const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

exports.handler = async (event) => {

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

    const page = await browser.newPage();

    await page.setContent("<html><body><h5>Hello World!</h5></body></html>")

    const pdf = await page.pdf({
        format: "A4",
        path: "output.pdf"
    });

    return {statusCode: 200};
  } catch (error) {
    console.error(error);
    return {statusCode: 500};
  }
};

报错信息

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:

解决建议

  • 匹配依赖版本兼容性:Node.js 16需使用适配的chrome-aws-lambda和puppeteer-core版本,建议安装指定版本:

    npm install chrome-aws-lambda@10.1.0 puppeteer-core@10.1.0
    

    高版本库已不再支持Node.js 16,版本不匹配会导致依赖缺失。

  • 补充系统依赖库:Lambda默认环境缺少部分Chromium运行所需的系统库,可通过Lambda层补充包含libnss3等依赖的层,或使用预打包的Chromium Lambda层。

  • 优化Puppeteer启动参数:Lambda环境资源有限,需添加必要启动参数规避限制,修改后的启动配置如下:

    const browser = await puppeteer.launch({
      executablePath: await chromium.executablePath,
      args: [...chromium.args, '--disable-gpu', '--single-process', '--disable-dev-shm-usage'],
      headless: chromium.headless,
      ignoreHTTPSErrors: true,
    });
    

    --disable-dev-shm-usage可避免Lambda临时内存不足问题,chromium.headless是库适配无服务器环境的最佳设置。

  • 修正文件写入路径:Lambda仅允许写入/tmp临时目录,代码中path: "output.pdf"会因权限问题失败,需改为path: "/tmp/output.pdf";若无需本地保存,可直接省略path参数,让page.pdf()返回Buffer后处理(如上传至S3)。

  • 提升Lambda内存配置:Chromium运行需要足够内存,建议将Lambda内存设置为至少512MB,最优为1024MB,内存不足会导致Chromium启动失败。

  • 清理部署包冗余:部署时使用npm ci --production安装生产依赖,避免打包本地Chromium二进制文件或多余依赖,确保部署包体积符合Lambda限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:33:11