Remotion LabRemotion Lab
LambdaLambda 常見問題

Lambda 常見問題

Remotion Lambda 常見問題解答,涵蓋設定疑問、除錯技巧、效能最佳化與授權相關問題。

Lambda 是自架的嗎?

不是。Remotion Lambda 使用的是你自己的 AWS 帳戶。Remotion 只提供工具、程式庫與二進制執行檔,讓你能在自己的 AWS 帳戶中部署和使用 Lambda 函式。你完全掌控自己的基礎設施與資料。

每次渲染都需要部署一個函式嗎?

不需要。部署一個函式後,可以重複使用它進行多次渲染。函式與 Remotion 版本綁定,只有在升級 Remotion 版本時才需要重新部署。

升級 Remotion Lambda 後,你需要部署一個新函式。你可以新舊函式同時運行:

  • @remotion/lambda CLI 會自動選擇與客戶端套件版本相符的函式
  • 若使用 getFunctions() Node.js API,設定 compatibleOnly: true 可過濾出相符版本的函式

若你以不同的記憶體大小、磁碟大小或逾時設定部署函式,則會建立新函式。若有多個相符的函式,Remotion 會隨機選擇一個,因此這個策略適合在不中斷服務的情況下更新函式參數。

可以同時渲染多少支影片?

取決於你的 AWS 帳戶並行限制。每次渲染使用 3 到 200 個並行 Lambda 函式(視並行設定而定)。

若超過並行限制,你會收到 AWS Lambda 的 TooManyRequestsException 錯誤。

若需要更高的並行能力,可以考慮:

# 查看目前的並行限制
npx remotion lambda quotas

需要建立多個 S3 儲存桶嗎?

每個區域建議只使用一個儲存桶。 Remotion 會在你首次呼叫時自動建立所需的儲存桶,並在後續操作中重複使用它。

需要部署多個站台嗎?

你可以部署一個站台並用於所有渲染。若有多個不同的 Remotion 專案模板,可以部署多個站台,它們都可以共用同一個 Lambda 函式。

如何渲染較長的影片?

不需要擔心 Lambda 函式的逾時限制,因為 Remotion 會將影片切分成許多部分並行渲染。

但你需要注意儲存空間限制,請參閱 磁碟大小設定 了解如何增加暫時儲存空間。

為什麼不使用 Amazon EFS?

Remotion 團隊評估過 Amazon Elastic File System(EFS),但發現效能優勢不足以抵消額外的複雜度:

  • 整合 EFS 需要建立 VPC 和安全群組,這會停用公開網路存取
  • 要恢復公開網路存取,需要建立持久的 EC2 執行個體來代理流量
  • 這樣做會抵消 Lambda 無伺服器架構的許多優勢

Remotion Lambda 費用是多少?

費用由兩部分組成:

  1. Remotion 授權費:詳見 定價頁面,僅適用於公司用戶
  2. AWS 費用:取決於你分配給 Lambda 函式的記憶體大小

Remotion 會在 API 回應中估算 Lambda 費用。你也可以使用 estimatePrice() API 提前估算費用。

如何升級或重新部署 Lambda 函式?

Remotion 會尋找與 Node.js 函式庫 / CLI 版本相符的 Lambda 函式。

若不再需要舊函式,可以先刪除所有現有函式:

npx remotion lambda functions rmall

然後部署新函式:

npx remotion lambda functions deploy

若使用 Node.js API,以下 API 很有用:

  • getFunctions() - 列出函式
  • deployFunction() - 部署函式
  • deleteFunction() - 刪除函式

可以修改 Lambda 內執行的程式碼嗎?

Lambda 內執行的程式碼是由 Remotion 提供的執行器二進制檔案。你無法修改 Remotion 為你部署的函式內部程式碼,但你可以使用許多設定選項,也可以透過 renderMediaOnLambda 等 API 從另一個 Lambda 函式呼叫 Remotion Lambda 函式。

Remotion Lambda 函式內部執行的原始碼可以在 GitHub 上找到,必要時可以 fork。建議先聯繫 Remotion 團隊確認是否真的需要 fork。

可以讓站台保持私密嗎?

渲染影片時,你需要指定一個 Serve URL,指向 Remotion 程式碼的 Webpack bundle。這個 URL 如果被知道,任何人都可以公開存取。Lambda 函式需要啟動無頭瀏覽器並訪問這個 URL 才能渲染影片。

儲存桶中的項目無法設為私密,因為它們需要透過 URL 在無頭瀏覽器中存取。

請不要在程式碼中硬編碼敏感資料,例如 API 金鑰或使用者資料。請改用 renderMediaOnLambda()inputPropsenvVariables 選項在渲染時傳入資料,這些值不會公開。

提高站台私密性的方法

雖然無法完全私密,但你可以:

  1. 使用較長且難以猜測的站台名稱
  2. 在儲存桶根目錄放置 robots.txt,加入 Disallow: / 規則,防止爬蟲存取你的站台並出現在搜尋結果中

只有你能觸發渲染

公開站台 URL 不會讓任何人能夠在你的 AWS 帳戶上觸發 Lambda 渲染。URL 僅提供 HTML、JavaScript 和資源檔案,不涉及你的 AWS 帳戶的任何運算存取。

每次渲染都需要部署新站台嗎?

不需要。你應該只部署一次站台,然後透過參數化的方式控制影片內容:

  • 使用 inputProps 傳入影片的內容參數(例如要顯示的元素陣列)
  • 使用 calculateMetadata() 動態設定影片的時長、尺寸與 FPS
  • 若有多個結構不同的模板,在 bundle 中部署多個 <Composition>
// 範例:使用 inputProps 傳入動態內容
await renderMediaOnLambda({
  region: "us-east-1",
  functionName: "remotion-render-xxxxx",
  serveUrl: "https://...",
  composition: "MyTemplate",
  inputProps: {
    // 每次渲染可傳入不同的資料
    title: "客製化標題",
    items: ["項目一", "項目二"],
    duration: 300,
  },
  codec: "h264",
});

更多資訊請參閱 傳遞 Props 文件。

相關資源