Lambda 自訂層
在 Remotion Lambda 中使用自訂 Lambda 層,替換 Chrome 版本、字型或表情符號
Lambda 自訂層
Remotion Lambda 函式預設包含 Chrome 瀏覽器與基本字型。在某些進階使用情境中,你可能需要替換這些元件——例如使用不同版本的 Chrome、替換預設字型,或更換表情符號字型。
預設層配置
Remotion Lambda 提供兩種預設配置,可在部署函式時選擇:
預設選項(含 CJK 字型)
使用 --runtime-preference=cjk(或不指定選項)時:
| 元件 | 大小 |
|---|---|
| chromium | 196 MB |
| emoji-google | 9.9 MB |
| fonts | 1.9 MB |
| cjk(中日韓字型) | 16 MB |
| 合計 | 223.8 MB |
Apple 表情符號選項
使用 --runtime-preference=apple-emojis 時:
| 元件 | 大小 |
|---|---|
| chromium | 196 MB |
| emoji-apple | 45 MB |
| fonts | 1.9 MB |
| 合計 | 242.9 MB |
注意:啟用 Apple 表情符號後,為保持在 AWS 250 MB 限制內,CJK(中文、日文、韓文)字型支援將被移除,Google 表情符號也會一併移除。
版本需求
自訂 Lambda 層功能從 Remotion v3.0.17 起可用。Lambda 二進位檔案可能在 Remotion 次要版本中有所變動,請負責保持版本更新。
若你只需要新增字型,建議優先考慮使用 網頁字型,這樣更為簡便。
建立自訂二進位檔案
-
克隆
remotion-dev/lambda-binaries儲存庫 -
該儲存庫中的
chromium和fonts資料夾包含 ARM 版本的二進位檔案(x64 版本已停止支援) -
將你想要的檔案放入對應的資料夾。例如,要新增 Apple 表情符號字型,將
AppleColorEmoji.ttf放入fonts/.fonts/NotoSans/資料夾 -
由於 AWS Lambda 層總大小不得超過 250 MB(解壓縮後),你需要移除等量的其他檔案,例如:
- 移除
fonts/.fonts/NotoColorEmoji.ttf - 移除
fonts/.fonts/NotoSansCJKjp-Regular.otf
- 移除
-
檢查資料夾大小:
sh size.sh- 完成修改後,執行以下指令打包層:
sh make.sh打包後的層將作為成品放置於 out 目錄中。
在 AWS 建立 Lambda 層
- 進入 AWS 主控台,選擇 Lambda 服務,然後選擇「Layers(層)」
- 點擊「Create layer(建立層)」,填入名稱
- 從
out資料夾上傳建立好的層壓縮檔 - 「Compatible architectures(相容架構)」、「Compatible runtimes(相容執行環境)」和「License(授權)」欄位為選填
- 層建立完成後,你將獲得版本 ARN(例如:
arn:aws:lambda:us-east-1:123456789012:layer:apple-emoji:1)——請複製此 ARN
重要:你需要在每個使用 Remotion Lambda 的 AWS 區域分別建立此層。
更新 Lambda 函式
確保已部署 Remotion Lambda 函式後,你可以透過以下兩種方式之一更新函式使用的層:
方式一:透過 AWS 主控台
- 進入 AWS 主控台,選擇 Lambda 服務,然後選擇你要更新的 Lambda 函式
- 點擊「Layers(層)」
- 點擊「Edit(編輯)」
- 選擇要替換的層,點擊「Remove(移除)」,然後點擊「Save(儲存)」
- 返回後,再次點擊「Layers」,然後點擊「Add a layer(新增層)」
- 選擇「Specify an ARN(指定 ARN)」並輸入你剛才複製的 ARN
- 點擊「Verify(驗證)」,確認無誤後點擊「Add(新增)」
方式二:透過 Node.js 腳本
你可以在每次函式部署後執行以下腳本:
import {
LambdaClient,
UpdateFunctionConfigurationCommand,
} from '@aws-sdk/client-lambda';
const client = new LambdaClient({ region: 'us-east-1' });
await client.send(
new UpdateFunctionConfigurationCommand({
FunctionName: 'remotion-render-bds9aab',
Layers: [
'arn:aws:lambda:us-east-1:123456789012:layer:apple-emoji:1',
],
})
);
console.log('Lambda 層已更新');常見使用情境
- 需要特定 Chrome 版本:當新版 Chromium 有渲染 bug,需要降版時
- 使用 Apple 表情符號:製作目標受眾為 Apple 裝置用戶的影片時
- 自訂字型集:當預設字型不滿足需求,需要精確控制可用字型時