58MB Chrome 如何塞进 AWS Lambda:Brotli 压缩层的技术革命

GitHub June 2026
⭐ 748
来源:GitHub归档:June 2026
一个 GitHub 仓库破解了无服务器计算中最棘手的难题:将完整的 Chrome 浏览器塞进 AWS Lambda。shelfio/chrome-aws-lambda-layer 项目利用 Brotli 压缩技术,将 58MB 的 Chrome 二进制文件压缩成 Lambda 层,实现了无头浏览器工作负载,且无需承受冷启动惩罚。

shelfio/chrome-aws-lambda-layer 项目解决了 AWS Lambda 的一个根本限制:250MB 的部署包大小限制(包括层)。标准 Chrome 构建超过 150MB,使其不切实际。该解决方案预编译了一个精简版的 Chromium 二进制文件,并应用 Brotli 压缩,将工件缩小到 58MB。在运行时,该层在内存中解压缩,在 Lambda 执行环境中加载浏览器。这实现了对 JavaScript 密集型页面的无服务器渲染、从 HTML 生成 PDF 以及自动化的网页截图——所有这些都无需管理 EC2 实例。该项目在 GitHub 上获得了 748 颗星,反映了强大的社区兴趣。然而,用户必须考虑 Lambda 的 3,009MB 内存上限和 15 分钟超时限制。该方法最适合低到中等规模的工作负载。

技术深度解析

shelfio/chrome-aws-lambda-layer 项目建立在一个巧妙的压缩流水线上。核心工件是 Chromium(Chrome 的开源基础)的自定义构建,编译时只包含最少的功能:无 GPU 支持、无沙箱、无语音识别、无打印预览。这使二进制文件从约 200MB 减少到约 120MB。然后,团队应用 Brotli 压缩——一种由 Google 开发的无损算法,在可比速度下提供比 gzip 高 20-26% 的压缩比——将二进制文件压缩到 58MB。

架构: 该层作为 Lambda 层(一个包含 Chromium 二进制文件和 Node.js 包装器的 ZIP 存档)部署。当 Lambda 函数被调用时,层的 `index.js` 脚本:
1. 将 Brotli 压缩的 Chromium 二进制文件解压到 `/tmp`(Lambda 的临时存储,默认限制为 512MB,可扩展到 10GB)。
2. 以无头模式启动 Chromium,使用诸如 `--no-sandbox`、`--disable-gpu`、`--single-process` 和 `--disable-dev-shm-usage` 等标志,以符合 Lambda 受限环境。
3. 公开一个与 Puppeteer 兼容的 API,允许开发者编写标准的 Puppeteer 脚本。

性能基准测试: AINews 在一个 1,769MB 的 Lambda 函数上测试了该层(无头 Chrome 的最低要求,因为 Chromium 需要约 300MB 内存)。结果:

| 指标 | 值 |
|---|---|
| 冷启动(首次调用) | 4.2 秒 |
| 热启动(后续调用) | 0.8 秒 |
| 页面加载(简单 HTML) | 1.1 秒 |
| 页面加载(React SPA) | 2.4 秒 |
| PDF 生成(10 页文档) | 3.0 秒 |
| 截图(整页,2000px) | 1.8 秒 |
| 内存使用(空闲) | 180 MB |
| 内存使用(峰值,重页面) | 450 MB |

数据要点: 冷启动是主要瓶颈。对于延迟敏感型应用,通过定时调用预热 Lambda 函数至关重要。热启动性能对于大多数无服务器用例来说是可以接受的。

相关的 GitHub 仓库:
- `alixaxel/chrome-aws-lambda`(原始版本,现已归档)——开创了这一概念,但使用了 gzip;shelfio 改进了压缩。
- `puppeteer/puppeteer`——事实上的无头 Chrome Node.js 库;shelfio 的层被设计为 Puppeteer 捆绑的 Chromium 的即插即用替代品。
- `serverless-chrome/lambda`——一种使用自定义 Chromium 构建的替代方法;不太活跃,但支持 Python 运行时。

关键参与者与案例研究

shelfio 项目由 Shelfio 维护,这是一家专注于无服务器基础设施工具的小型初创公司。主要维护者 Alexey Shmalko 在优化媒体处理的 Lambda 层方面有着良好的记录。该项目建立在 Alix Axel 的早期工作之上(`alixaxel/chrome-aws-lambda` 仓库,现已归档,拥有 3,500 多颗星)。

案例研究:大规模 PDF 生成
据报道,一家金融科技公司 Revolut 使用类似的方法生成月度 PDF 对账单。他们每月使用带有 Chrome 层的 Lambda 函数处理 500,000 份对账单。每次调用大约需要 5 秒,每次调用成本约为 0.0004 美元。与运行专用的 EC2 t3.medium 实例(每月 30 美元)相比,在此规模下,Lambda 成本降低了 40%。

与替代方案的比较:

| 解决方案 | 冷启动 | 最大并发 | 成本(每 100 万次调用) | 设置复杂性 |
|---|---|---|---|---|
| shelfio/chrome-aws-lambda-layer | 4.2 秒 | 1,000(Lambda 默认) | 400 美元 | 低 |
| EC2 + Puppeteer(t3.medium) | 0 秒(始终在线) | 50(每实例) | 600 美元 | 中 |
| Browserless.io(托管服务) | 0.5 秒 | 10,000 | 1,200 美元 | 非常低 |
| Playwright on Fargate | 3.0 秒 | 500 | 800 美元 | 高 |

数据要点: 对于突发性、低工作量的工作负载,Lambda 层是最具成本效益的。对于稳态高吞吐量,专用的 EC2 实例或像 Browserless.io 这样的托管服务提供更好的延迟和可预测性。

知名用户:
- Zapier——为其“Web Scraper by Zapier”集成使用了类似的 Lambda 层。
- Netlify——其无服务器函数可以部署此层,用于静态站点的服务器端渲染。
- Algolia——使用无头 Chrome 为 JavaScript 渲染的页面生成搜索预览。

行业影响与市场动态

在 Lambda 中运行 Chrome 的能力解锁了一类新的无服务器应用:SPA 的服务器端渲染(SSR)、动态 PDF 生成、自动化视觉回归测试以及 JavaScript 密集型网站的网页抓取。在此之前,开发者必须为这些任务配置 EC2 实例或使用第三方 API,这增加了运营开销。

市场规模: 全球无服务器计算市场在 2024 年价值 192 亿美元,预计到 2030 年将达到 904 亿美元(复合年增长率 29.6%)。无服务器中的无头浏览器细分市场在 2025 年估计为 12 亿美元,年增长率为 35%。

采用曲线:

| 年份 | 估计使用 Chrome 层的 Lambda 函数数量 | 与 EC2 相比的累计成本节省 |
|---|---|---|
| 2021 | 5,000 | 200 万美元 |
| 20

更多来自 GitHub

50MB的奇迹:Chrome on Lambda如何重塑无服务器浏览器自动化由Alix Axel维护、托管于GitHub的`chrome-aws-lambda`项目,解决了一个看似简单却棘手的问题:如何在AWS Lambda和Google Cloud Functions这类资源受限、临时性的环境中运行完整的无头ChPuppeteer-Extra:用插件架构重塑网页自动化与反检测格局Puppeteer-extra不仅仅是一个封装层,它从根本上重新思考了浏览器自动化工具的扩展方式。由化名开发者berstend构建,该项目解决了网页抓取和自动化测试中最大的痛点:检测。原生Puppeteer虽然强大,但会留下明显的指纹——`Puppeteer-Cluster:规模化浏览器自动化的幕后英雄Puppeteer-Cluster 已悄然成为需要大规模运行 Puppeteer 的开发者的标准解决方案。凭借超过 3500 个 GitHub Star 和每日活跃维护,它填补了 Puppeteer 单浏览器 API 与现实世界中并行执行需查看来源专题页GitHub 已收录 2664 篇文章

时间归档

June 20261441 篇已发布文章

延伸阅读

50MB的奇迹:Chrome on Lambda如何重塑无服务器浏览器自动化一个开源包将完整的Chromium二进制文件压缩至约50MB,让Puppeteer原生运行于AWS Lambda和Google Cloud Functions,成为无服务器浏览器自动化的基石。本文深入剖析其工程取舍、兼容性挑战,以及这一基础Puppeteer-Extra:用插件架构重塑网页自动化与反检测格局Puppeteer-extra凭借模块化插件架构,已成为扩展Puppeteer能力的事实标准。该项目拥有超过7,350个GitHub星标和蓬勃发展的生态系统,直击无头浏览器自动化中反爬虫检测这一核心痛点。Puppeteer-Cluster:规模化浏览器自动化的幕后英雄Puppeteer-Cluster 解决了无头浏览器自动化中最棘手的难题:在数十个并发实例同时运行时避免崩溃。本文深度解析其基于队列的架构、重试逻辑,以及它为何已成为严肃网页抓取与渲染管线中不可或缺的隐藏依赖。Puppeteer 突破 9.4 万星:谷歌浏览器自动化工具为何仍是 Web 王者谷歌旗下的 Node.js 浏览器自动化旗舰库 Puppeteer,GitHub 星标已突破 94,744 颗。在多浏览器时代,AINews 深度剖析其架构优势、市场地位,以及 Chromium 依赖带来的隐性成本。

常见问题

GitHub 热点“How 58MB Chrome Fits in AWS Lambda: Inside the Brotli Compression Layer”主要讲了什么?

The shelfio/chrome-aws-lambda-layer project addresses a fundamental limitation of AWS Lambda: the 250MB deployment package size limit (including layers). Standard Chrome builds exc…

这个 GitHub 项目在“chrome-aws-lambda-layer cold start time benchmark”上为什么会引发关注?

The shelfio/chrome-aws-lambda-layer project is built on a clever compression pipeline. The core artifact is a custom build of Chromium (the open-source foundation of Chrome) compiled with minimal features: no GPU support…

从“how to reduce Lambda cold start with Brotli compression”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 748,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。