Cloud Run 限制
Remotion Cloud Run 的技術限制,包含逾時時間、記憶體上限、並行數量與功能限制,以及對應的因應方式。
Cloud Run 限制
在使用 Remotion Cloud Run 時,需了解 Google Cloud Run 平台本身的限制,以便在架構設計時做出正確的決策。
實驗性功能:Cloud Run 目前處於 Alpha 狀態,並未積極開發中。
硬性限制(無法調整)
以下為 Google Cloud Run 平台的硬性上限:
| 限制項目 | 上限值 | 說明 |
|---|---|---|
| 最大逾時時間 | 3600 秒(60 分鐘) | 單次請求的最長執行時間 |
| 最大記憶體 | 32 GB | 單一實例可分配的最大記憶體 |
| 最大 CPU | 8 vCPU | 單一實例可分配的最大 CPU 核心數 |
| 可寫入檔案系統(記憶體內) | 受實例記憶體限制 | Cloud Run 使用記憶體內檔案系統 |
| 請求酬載大小 | 32 MB | 單次 HTTP 請求的最大 body 大小 |
| 最大並行數(per 實例) | 1000 | 單一實例可同時處理的請求數 |
最新數值請參閱 Google Cloud Run 配額頁面。
可調整的限制
以下限制可在部署服務時自行設定:
| 限制項目 | 預設值 | 可設定範圍 |
|---|---|---|
| 逾時時間 | 300 秒 | 1–3600 秒 |
| 記憶體 | 512 MB | 128 MB–32 GB |
| CPU | 1 vCPU | 1–8 vCPU |
| 最小實例數 | 0 | 0–1000 |
| 最大實例數 | 100 | 1–1000 |
npx remotion cloudrun services deploy \
--region=asia-east1 \
--timeout=3600 \
--memory=32Gi \
--cpu=8 \
--min-instances=0 \
--max-instances=50渲染時長限制
受到最大逾時時間(3600 秒)的限制,可渲染的影片長度取決於渲染速度:
| 影片類型 | 預估渲染速度 | 最大可渲染時長(估算) |
|---|---|---|
| 簡單動畫(30fps) | 實際時長的 3–5 倍渲染時間 | 約 12–20 分鐘 |
| 中等複雜度(30fps) | 實際時長的 5–10 倍 | 約 6–12 分鐘 |
| 高複雜度(含 3D/WebGL) | 實際時長的 10–20 倍 | 約 3–6 分鐘 |
以上為粗略估算,實際結果取決於 Composition 複雜度、使用的媒體資源和分配的 CPU/記憶體。
記憶體使用特性
Cloud Run 使用記憶體內檔案系統(tmpfs),這表示:
- 渲染過程中的暫存幀會佔用記憶體
- 高解析度(4K 以上)影片需要大量記憶體
- 長影片需要較多記憶體來緩衝幀資料
記憶體需求估算:
所需記憶體 ≈ 幀解析度(像素) × 4 bytes × 緩衝幀數 × 安全係數
例如,渲染 1080p 影片(1920×1080):
1920 × 1080 × 4 bytes × 8 幀緩衝 ≈ 63 MB(僅幀緩衝)
加上 Chromium 基礎記憶體(≈1.5 GB)和應用程式本身
建議最少配置 4 GB 記憶體
功能限制
無持久化檔案系統
Cloud Run 沒有持久化磁碟,每次請求結束後檔案系統內容會消失。因此:
- 渲染輸出必須上傳至 Cloud Storage
- 無法在兩次請求之間共用快取(除非使用外部快取如 Redis)
- 預打包的 bundle 無法在多次請求間重用
不支援 GPU
Cloud Run 目前不支援 GPU 加速渲染。所有渲染工作均在 CPU 上執行,使用 SwAngle(軟體模擬 WebGL)。
若你的 Composition 大量使用 WebGL 或 3D 效果,渲染速度會較慢。
設定 OpenGL 為軟體渲染模式(必要設定):
// remotion.config.ts
import { Config } from "@remotion/cli/config";
Config.setChromiumOpenGlRenderer("swangle");冷啟動延遲
當最小實例設為 0 時(預設值),第一次渲染請求需要啟動新的 Cloud Run 實例:
- 冷啟動時間:通常 5–15 秒
- 後續請求(熱實例):通常 < 1 秒的排程延遲
若需要低延遲,設定最小實例為 1:
npx remotion cloudrun services deploy \
--region=asia-east1 \
--min-instances=1注意:最小實例為 1 時,即使沒有渲染請求,也會持續計費。
並行渲染數量
雖然單一實例支援最多 1000 個並行請求,但 Remotion 渲染是 CPU 密集型工作,建議每個實例同時只處理 1 個渲染任務:
const result = await renderMediaOnCloudrun({
// ...
// Cloud Run 服務建議設定 concurrency=1(每實例一個渲染)
});要增加整體渲染吞吐量,應增加實例數量(水平擴展)而非增加每個實例的並行數。
與 Lambda 的限制比較
若你同時考慮 Remotion Lambda(AWS)和 Cloud Run(GCP),以下是限制比較:
| 限制項目 | Cloud Run | Lambda |
|---|---|---|
| 最大逾時 | 60 分鐘 | 15 分鐘 |
| 最大記憶體 | 32 GB | 10 GB |
| 最大 CPU | 8 vCPU | 6 vCPU |
| GPU 支援 | 無 | 無 |
| 並行渲染 | 多實例水平擴展 | 多函式並行 |
| 冷啟動 | 5–15 秒 | 1–5 秒 |
Cloud Run 在記憶體和逾時方面比 Lambda 有更大的配額,適合需要渲染長影片或高解析度影片的使用場景。
因應限制的設計模式
長影片分段渲染
對於超過逾時限制的超長影片,可分段渲染再合併:
import { renderMediaOnCloudrun } from "@remotion/cloudrun";
import { mergeMedia } from "@remotion/media-utils"; // 假設工具
const SEGMENT_FRAMES = 1800; // 每段 60 秒(30fps)
const totalFrames = 9000; // 5 分鐘影片
const segments = [];
for (let start = 0; start < totalFrames; start += SEGMENT_FRAMES) {
const end = Math.min(start + SEGMENT_FRAMES - 1, totalFrames - 1);
const result = await renderMediaOnCloudrun({
region: "asia-east1",
serviceName: "remotion-render-4-0-0",
serveUrl: "https://storage.googleapis.com/...",
composition: "LongVideo",
codec: "h264",
frameRange: [start, end],
outName: `segments/segment-${start}.mp4`,
});
if (result.type === "success") {
segments.push(result.cloudStorageUri);
}
}
// 合併所有片段
// await mergeSegments(segments, "output/final.mp4");小結
- Cloud Run 最大逾時 60 分鐘、最大記憶體 32 GB、最大 CPU 8 核心
- 不支援 GPU,需設定
chromiumOpenGlRenderer: "swangle" - 沒有持久化檔案系統,渲染輸出必須存至 Cloud Storage
- 冷啟動約 5–15 秒,可設最小實例為 1 消除冷啟動(但需持續計費)
- 超長影片可分段渲染再合併