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

AWS Lambda中用Chromium-min生成PDF遇/tmp/chromium无法执行错误

解决AWS Lambda(arm64/Node.js 16.x)中@sparticuz/chromium-min无法执行二进制文件的问题

核心问题定位

报错/tmp/chromium: cannot execute binary file的核心原因是下载的Chromium二进制架构与Lambda的arm64架构不匹配,或二进制文件缺少可执行权限。以下是针对性的解决步骤:


1. 下载对应arm64架构的Chromium二进制包

默认示例可能拉取的是x86_64架构的包,需替换为arm64版本:

  • 选择与@sparticuz/chromium-min版本匹配的arm64压缩包(可从官方发布页确认对应版本的arm64资源)
  • 在代码中修改下载URL,例如:
    const arm64ChromiumUrl = "https://github.com/Sparticuz/chromium/releases/download/v119.0.0/chromium-v119.0.0-arm64-min.zip";
    

2. 强制设置二进制文件可执行权限

解压后必须为Chromium二进制添加执行权限,否则Lambda环境会拒绝执行:

const chromiumPath = "/tmp/chromium";
fs.chmodSync(chromiumPath, 0o755); // 设置可读可写可执行权限

3. 修正Puppeteer启动配置

确保启动参数适配arm64架构及Lambda环境:

const browser = await puppeteer.launch({
  args: [
    ...chromium.args,
    "--no-sandbox",
    "--disable-dev-shm-usage", // 解决Lambda临时空间不足问题
    "--single-process" // arm64环境下可能需要的额外参数
  ],
  executablePath: chromiumPath,
  headless: chromium.headless,
  ignoreHTTPSErrors: true,
});

4. 版本兼容性校验

  • 确认@sparticuz/chromium-min版本与Node.js 16.x兼容(部分高版本chromium-min要求Node.js 18+,可降级至适配Node16的版本)
  • 确保Layer中仅包含arm64架构的依赖包,避免混合x86资源

完整示例代码

const puppeteer = require("puppeteer-core");
const chromium = require("@sparticuz/chromium-min");
const fs = require("fs");
const https = require("https");
const unzipper = require("unzipper");

exports.handler = async (event) => {
  const chromiumPath = "/tmp/chromium";

  // 检查并下载arm64 Chromium
  if (!fs.existsSync(chromiumPath)) {
    const downloadUrl = "https://github.com/Sparticuz/chromium/releases/download/v119.0.0/chromium-v119.0.0-arm64-min.zip";
    await new Promise((resolve, reject) => {
      https.get(downloadUrl, (res) => {
        res.pipe(unzipper.Extract({ path: "/tmp" }))
          .on("close", resolve)
          .on("error", reject);
      });
    });
    // 设置执行权限
    fs.chmodSync(chromiumPath, 0o755);
  }

  // 生成PDF
  const browser = await puppeteer.launch({
    args: [...chromium.args, "--no-sandbox", "--disable-dev-shm-usage"],
    executablePath: chromiumPath,
    headless: chromium.headless,
    ignoreHTTPSErrors: true,
  });

  const page = await browser.newPage();
  await page.setContent("<h1>PDF生成测试</h1><p>arm64 Lambda环境验证</p>");
  const pdfBuffer = await page.pdf({ format: "A4" });
  
  await browser.close();

  return {
    statusCode: 200,
    headers: { "Content-Type": "application/pdf" },
    body: pdfBuffer.toString("base64"),
    isBase64Encoded: true,
  };
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:26:03