將 Deno Sandbox 升級為 Deploy 應用程式

有些時候,Deno Sandbox 中驗證成功的概念或原型,會值得繼續作為正式的 Deno Deploy 應用程式運行。你不必在其他地方重建整個程式碼庫,可以直接用 sandbox.deno.deploy() 將沙箱升級。

臨時計算 vs Deploy 應用程式

方面 Deno Sandbox Deno Deploy 應用程式
存活時間 秒到分鐘 常駐運行、受管理的 rollout
控制平面 透過 SDK 以程式方式操作 Dashboard + CI/CD
使用情境 Agents、預覽、不受信任程式碼 正式 API、長期運行服務
狀態 暫時性(需要時可用磁碟區) 透過 KV、資料庫提供持久化部署
對外暴露 每個沙箱各自 exposeHttp()/exposeSsh() 內建自訂網域、TLS、路由

先在沙箱中快速迭代。當程式碼庫穩定且需要 24/7 可用性時,再將它升級為 Deploy 應用程式,讓建置、rollout 與可觀測性都由平台代管。

使用 sandbox.deno.deploy() 升級

當沙箱已驗證概念可行時,你可以不必在別處重建,直接把它變成常駐的 Deploy 應用程式。sandbox.deno.deploy() 會對目前檔案系統建立快照、沿用網路策略, 並為應用程式建立持久 URL、可觀測性與團隊存取能力。

await using sandbox = await Sandbox.create({ timeout: "10m" });
// ...build or scaffold your service...

const app = await sandbox.deno.deploy("ai-preview", {
  entrypoint: "server.ts",
});
console.log(`Promoted to Deploy app ${app.slug}`);
from deno_sandbox import DenoDeploy

sdk = DenoDeploy()

with sdk.sandbox.create(timeout="10m") as sandbox:
  # ...build or scaffold your service...

  build = sandbox.deno.deploy("ai-preview", entrypoint="server.ts")
  print(f"Promoted to Deploy app, revision ID: {build.id}")
from deno_sandbox import AsyncDenoDeploy

sdk = AsyncDenoDeploy()

async with sdk.sandbox.create(timeout="10m") as sandbox:
  # ...build or scaffold your service...

  build = await sandbox.deno.deploy("ai-preview", entrypoint="server.ts")
  print(f"Promoted to Deploy app, revision ID: {build.id}")

升級的理由:

  • 讓沙箱中的實驗以正式 SLA 持續承接客戶流量。
  • 由平台代你處理 TLS、自訂網域、回滾與流量分流。
  • 透過 Deploy UI 在團隊內共享可觀測性(logs/traces/metrics)。
  • 取代脆弱的交接流程;沙箱當下的精確狀態會成為已部署修訂版本。

沙箱適合快速、短暫的工作;當程式碼應該作為受管理服務持續運行時,再呼叫 sandbox.deno.deploy()