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

使用AWS Lambda与Puppeteer动态截图失败:依赖库缺失报错求助

解决AWS Lambda + Puppeteer-Core 截图时的libnss3.so缺失问题

问题根源

Lambda的Amazon Linux 2运行时默认缺少Chromium运行所需的系统依赖库,即便使用了Chromium封装包,若启动参数或依赖版本搭配不当,就会触发这类库缺失错误。

分步解决方案

1. 锁定兼容的依赖版本

针对Node.js 20,用这套经过验证的依赖组合:

  • puppeteer-core@23.8.0
  • @sparticuz/chromium@131.0.0

执行安装命令:

npm install puppeteer-core@23.8.0 @sparticuz/chromium@131.0.0

2. 编写正确的Lambda代码

必须正确加载Chromium路径、配置强制的启动参数,示例代码如下:

const chromium = require("@sparticuz/chromium");
const puppeteer = require("puppeteer-core");

exports.handler = async (event) => {
  let browser = null;
  try {
    // 获取Lambda运行时Chromium的可执行路径
    const executablePath = await chromium.executablePath();
    
    // 启动浏览器,沙箱禁用参数是Lambda环境必须的
    browser = await puppeteer.launch({
      executablePath,
      args: chromium.args.concat([
        "--no-sandbox",
        "--disable-setuid-sandbox",
        "--disable-dev-shm-usage", // 规避Lambda临时存储空间不足的问题
        "--single-process" // 降低资源占用,适配Lambda环境
      ]),
      headless: chromium.headless,
      defaultViewport: chromium.defaultViewport,
    });

    // 执行截图逻辑
    const page = await browser.newPage();
    await page.goto(event.url || "https://example.com");
    const screenshotBuffer = await page.screenshot({ fullPage: true });

    return {
      statusCode: 200,
      headers: { "Content-Type": "image/png" },
      body: screenshotBuffer.toString("base64"),
      isBase64Encoded: true,
    };
  } catch (error) {
    return {
      statusCode: 500,
      body: JSON.stringify({ error: error.message }),
    };
  } finally {
    // 确保浏览器资源释放
    if (browser) await browser.close();
  }
};

3. 打包部署的关键注意事项

  • 别在Windows/macOS本地打包:本地环境安装的依赖包含与Lambda不兼容的系统库,建议用两种方式打包:
    • 用Lambda层:将node_modules打包为层,上传后关联到你的Lambda函数
    • 用Docker镜像:基于public.ecr.aws/lambda/nodejs:20镜像构建,在容器内安装依赖后打包上传,确保依赖适配Amazon Linux 2环境
  • 调整Lambda内存配置:Chromium至少需要1GB内存,建议设为2GB,避免运行时因资源不足崩溃

4. 额外排查点

如果还是报错,检查这几点:

  • Lambda执行角色权限:无需特殊权限,基础执行权限即可
  • /tmp目录权限:Lambda默认允许写入该目录,无需额外配置
  • 尝试添加--disable-gpu、--no-zygote到启动参数中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:22:40