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 可在 jsr 和 npm 以 @deno/sandbox 名称获得(JSR 包针对 Deno 使用进行了优化)。Python SDK 可在 PyPI 以 deno-sandbox 名称获得。有关直接 API 访问,请参阅 REST API 文档。
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 边缘运行代码。