Skip to main content
On this page

Deno 沙箱

Deno 沙箱为 Deno Deploy 带来了即时的 Linux 微虚拟机。每个沙箱启动时间不到一秒,且通过 @deno/sandbox SDK 完全由 API 驱动,并且一旦使用完毕立即销毁。结果是按需计算,感觉就像打开了一个终端,但拥有生产级的隔离和可观察性。

什么是 Deno 沙箱? Jump to heading

  • 由 Deno Deploy 编排的独立 Linux 微虚拟机
  • 设计用于运行不受信任的代码
  • 即时可用;启动时间以毫秒计
  • 默认是临时的,但可超出当前连接生命周期持续存在
  • 可通过访问持久存储
  • 完全由 API 驱动:可以通过代码创建、运行命令和销毁

理想使用场景 Jump to heading

Deno 沙箱专注于需要生成、评估或代表不受信任用户安全执行代码的工作负载。它们适合用于:

  • 需要在推理过程中运行代码的 AI 代理和协同助手
  • 安全的插件或扩展系统
  • 氛围编程和协作 IDE 体验
  • 临时的 CI 运行器和冒烟测试
  • 客户提供或用户生成的代码路径
  • 即时开发服务器和预览环境

这不仅是为开发者构建的计算,更是为构建软件的软件而设。

运行真实工作负载 Jump to heading

一旦 Deno 沙箱创建,就会获得完整的 Linux 环境,包括文件、进程、包管理器和后台服务:

import { Sandbox } from "@deno/sandbox";
await using sandbox = await Sandbox.create();
await sandbox.sh`ls -lh /`;
from deno_sandbox import DenoDeploy

def main():
  sdk = DenoDeploy()

  with sdk.sandbox.create() as sandbox:
    process = sandbox.spawn("ls", args=["-lh"])
    process.wait()
from deno_sandbox import AsyncDenoDeploy

async def main():
  sdk = AsyncDenoDeploy()

  async with sdk.sandbox.create() as sandbox:
    process = await sandbox.spawn("ls", args=["-lh"])
    await process.wait()

安全策略 Jump to heading

配置沙箱,使其只能与批准的主机通信:

await Sandbox.create({
  allowNet: ["google.com"],
});
sdk = AsyncDenoDeploy()

async with sdk.sandboxes.create(allowNet=["google.com"]) as sandbox:
  print(f"沙箱 {sandbox.id} 已准备好。")
sdk = DenoDeploy()

with sdk.sandboxes.create(allowNet=["google.com"]) as sandbox:
  print(f"沙箱 {sandbox.id} 已准备好。")

秘密信息绝不会进入沙箱环境。只有当沙箱向批准的主机发出外部请求时,才会替换为真实值。

await Sandbox.create({
  allowNet: ["api.openai.com"],
  secrets: {
    OPENAI_API_KEY: {
      hosts: ["api.openai.com"],
      value: process.env.OPENAI_API_KEY,
    },
  },
});
sdk = AsyncDenoDeploy()

async with sdk.sandboxes.create(
  allowNet=["api.openai.com"],
  secrets={
    "OPENAI_API_KEY": {
      "hosts": ["api.openai.com"],
      "value": os.environ.get("OPENAI_API_KEY"),
    }
  },
) as sandbox:
  print(f"沙箱 {sandbox.id} 已准备好。")
sdk = DenoDeploy()

with sdk.sandboxes.create(
  allowNet=["api.openai.com"],
  secrets={
    "OPENAI_API_KEY": {
      "hosts": ["api.openai.com"],
      "value": os.environ.get("OPENAI_API_KEY"),
    }
  },
) as sandbox:
  print(f"沙箱 {sandbox.id} 已准备好。")

为即时、安全计算而生 Jump to heading

开发者和 AI 系统现在期望计算即刻响应、安全且全球可访问。Deno 沙箱提供了:

  • 即时启动,无需管理预热池
  • 专用隔离及严格的网络出口策略
  • 与 Deno Deploy 日志和跟踪并行的完整可观察性
  • 每个沙箱支持区域选择、内存大小和生命周期控制
  • 代码准备好生产后可无缝交接至 Deno Deploy 应用

Deno Deploy 和 Deno 沙箱共同构成单一工作流:代码被创建,在沙箱中验证安全,然后无需新基础设施或编排层即能全球部署。

运行时支持 Jump to heading

Deno 沙箱 SDK 已在以下环境测试并支持:

  • Deno: 最新稳定版本
  • Node.js: 版本 24 及以上
  • Python: 3.10 及以上

你可以从任何能够向 Deno Deploy API 发起 HTTPS 出站请求的环境中使用 Deno 沙箱。JavaScript SDK 可在 jsrnpm@deno/sandbox 名称获得(JSR 包针对 Deno 使用进行了优化)。Python SDK 可在 PyPIdeno-sandbox 名称获得。有关直接 API 访问,请参阅 REST API 文档

await using 支持

await using 语法要求 Node.js 24 及以上版本。如果项目使用较低版本的 Node.js,请改用 try/finally 块:

import { Sandbox } from "@deno/sandbox";

const sandbox = await Sandbox.create();
try {
  // ... 使用 sandbox ...
} finally {
  await sandbox.close();
}

限制 Jump to heading

Deno 沙箱有以下限制:

  • **内存:**768 MB 到 4096 MB(默认 1.2GB),每个沙箱可配置
  • CPU: 2 vCPU
  • **生命周期:**每个沙箱可配置,绑定于会话,最长 30 分钟
  • **磁盘:**10 GB 临时存储
  • **并发数:**每个组织限制 5 个并发沙箱(这是 Deno 沙箱预发布阶段的默认并发限制。如需更高限制,请联系 deploy@deno.com。)

超出这些限制可能导致沙箱被限流或终止。

区域 Jump to heading

当前支持的区域有:

  • ams - 荷兰阿姆斯特丹
  • ord - 美国芝加哥

创建新沙箱时,可以指定沙箱所在区域:

import { Sandbox } from "@deno/sandbox";

await using sandbox = await Sandbox.create({ region: "ams" });
from deno_sandbox import DenoDeploy

def main():
  sdk = DenoDeploy()

  with sdk.sandboxes.create(region="ams") as sandbox:
    print(f"沙箱 {sandbox.id} 已准备好。")
from deno_sandbox import AsyncDenoDeploy

async def main():
  sdk = AsyncDenoDeploy()

  async with sdk.sandboxes.create(region="ams") as sandbox:
    print(f"沙箱 {sandbox.id} 已准备好。")

若未指定,沙箱将创建在默认区域。

了解更多 Jump to heading

准备试用吗?请跟随 入门指南 创建你的第一个沙箱,获取访问令牌,并在 Deploy 边缘运行代码。

你找到了你需要的东西吗?

编辑此页面
隐私政策