用途
该技能用于将 Remotion Lambda 的 Chrome 二进制文件发布到 eu-central-1 测试区域,并更新托管层与 Chrome 版本引用。适用于更新 Chrome 版本、发布 Lambda 层、验证 Docker 渲染矩阵等场景。
主要能力
- 在指定 AWS 账号下发布 5 个 Lambda 层:fonts、chromium、emoji-apple、emoji-google、cjk。
- 更新 packages/lambda/src/shared/hosted-layers.ts 中的托管层引用。
- 更新多处 Chrome 版本引用,包括下载 URL、层构建脚本、文档版本表与示例代码。
- 通过 Docker 矩阵测试验证新 Chrome 二进制。
使用方式
AWS 设置
- 运行
aws sts get-caller-identity确认 AWS CLI 已登录到账号 678892195805。若未登录,请用户先登录。 - 运行
eval "$(aws configure export-credentials --format env)"将 AWS 凭证导出到 shell。Lambda 客户端检查 AWS_ACCESS_KEY_ID,不会自行读取 SSO 或 Identity Center 凭证。 - 在 packages/lambda 目录下运行
bun src/admin/make-layer-public.ts --region=eu-central-1发布全部 5 个层。 - eval 与 bun 命令必须在同一次 shell 调用中执行,因为环境变量不会跨 shell 调用保留。
- 验证输出为 5 个层分别打印 LayerArn 和 Version,并最终输出包含已发布区域的 JSON dump。
更新托管层
将脚本 stdout 中的 JSON dump 复制到 packages/lambda/src/shared/hosted-layers.ts。不要手动递增版本号。脚本会在若干空行后打印完整的 HostedLayers 对象,显示 AWS 返回的每个层的 layerArn 和 version。用这些值替换 hosted-layers.ts 中对应区域的条目。测试阶段(--region=eu-central-1)仅更新 eu-central-1,其他区域在推广前保持旧版本。若脚本以 --skip=<region> 调用,则跳过区域保持不变。
更新 Chrome 引用
使用用户提供的 Chrome 版本,例如 157.0.8080.0。默认下载不再使用 Playwright revision。在 Google Chrome for Testing 下载元数据中验证所有支持平台均有相同 Chrome 版本。若无精确匹配,选择最接近的可用版本并保持其版本/缓存标记准确。Linux ARM64 上显式数字 Playwright revision 覆盖仍受支持。
需要更新的文件:
- packages/renderer/src/browser/get-chrome-download-url.ts:TESTED_VERSION。Remotion 与 Google CDN URL 使用此版本,包括 Amazon Linux 构建与 Linux ARM64 回退。验证全部 5 个 Remotion 归档以及 Linux x64/ARM64、macOS x64/ARM64、Windows x64 的两种 Google 浏览器模式。更换提供方时,对照归档布局检查 BrowserFetcher.ts 的可执行路径。
- 更改 URL 前,用
curl -sI针对新的硬编码 URL 以及跟随 TESTED_VERSION 的模板化chromium-headless-shell-linux-{arm64,x64}-<version>.zip?clearcacheURL 验证新二进制存在。仅当全部返回 HTTP 200 时继续;否则请用户将缺失构建上传到 remotion.media。 - packages/lambda/src/admin/make-layer-public.ts:Chromium <version>(从源码编译),以及传递给 PublishLayerVersionCommand 的 license 字符串。
- packages/docs/docs/lambda/runtime.mdx:在 "Chrome" 版本表前插入新行,对应下一个 Remotion 发布版本。从 packages/core/package.json 确定下一个版本并递增 patch。
- packages/docs/docs/miscellaneous/chrome-headless-shell.mdx:在版本表前插入新行,并更新 "Version tracking" 部分的示例版本字符串。
- packages/docs/docs/renderer/ensure-browser.mdx:更新示例代码块中两处
version: '<old>'。
Docker 验证
在 packages/dockerfiles/ 下用 ./run.sh 针对新 Chrome 二进制运行 Docker 矩阵测试。先确保 Docker Desktop 正在运行。
测试渲染内容:
- browser-test:Three.js、WebGL 与编解码器冒烟测试。
- html-in-canvas:实验性 WICG drawElementImage() 与 canvas.requestPaint() API。
输出位于 packages/dockerfiles/out/<platform>.mp4 与 packages/dockerfiles/out/<platform>-html-in-canvas.mp4。
Dockerfile 安装的是 @remotion/cli 的本地工作区构建及传递依赖,而非已发布版本。@remotion/renderer 的源码更改会在发布前被采用。run.sh 运行 pack-cli.ts,后者遍历 @remotion/cli 的 workspace:* 传递依赖,对每个运行 bun pm pack 输出到 packages/dockerfiles/tarballs/,并生成 local-cli-package.json,将每个 tarball 作为直接依赖与 override。
若向 Docker 测试矩阵添加新 composition,需在 packages/example/src/BrowserTestRoot.tsx 中注册,并在 run.sh 中添加对应的 RUN remotion render /usr/app/bundle <id> /usr/app/<filename>.mp4 行及 docker cp 提取。
packages/core/src/HtmlInCanvas.tsx 中的 <HtmlInCanvas> 运行时检查需要 ctx.drawElementImage、canvas.requestPaint、canvas.captureElementImage 与 transferControlToOffscreen,Chrome 149+ 在传入 --enable-features=CanvasDrawElement 时暴露这些。若 html-in-canvas 渲染失败并提示 "HTML in Canvas is not supported" 而 browser-test 通过,最可能的原因是 Chrome 版本不匹配。
适用场景
- 更新 Remotion Lambda 使用的 Chrome 版本。
- 向测试区域发布 Lambda 层并验证。
- 在推广到所有区域前进行端到端验证。
限制
- 测试区域验证通过前,不应推广到所有区域。
- 环境变量不跨 shell 调用保留,eval 与 bun 命令需在同一次 shell 调用中执行。
- 若新二进制 URL 未全部返回 HTTP 200,需用户上传缺失构建。
- 其他区域在推广前保持旧版本。