← Sandbox SDK / sandbox / concepts
Architektura
Sandbox SDK umožňuje bezpečně spouštět nedůvěryhodný kód z vašich Workers. Kombinuje tři technologie Cloudflare a poskytuje tak bezpečné, stavové a izolované spouštění:
- Workers - Logika vaší aplikace, která volá Sandbox SDK
- Durable Objects - Trvalé instance sandboxu s jedinečnými identitami
- Containers - Izolovaná prostředí Linuxu, ve kterých se kód skutečně spouští
Přehled architektury
flowchart TB
accTitle: Sandbox SDK Architecture
accDescr: Three-layer architecture showing how Cloudflare Sandbox SDK combines Workers, Durable Objects, and Containers for secure code execution
subgraph UserSpace["<b>Your Worker</b>"]
Worker["Application code using the methods exposed by the Sandbox SDK"]
end
subgraph SDKSpace["<b>Sandbox SDK Implementation</b>"]
DO["Sandbox Durable Object routes requests & maintains state"]
Container["Isolated Ubuntu container executes untrusted code safely"]
DO -->|HTTP API| Container
end
Worker -->|RPC call via the Durable Object stub returned by `getSandbox`| DO
style UserSpace fill:#fff8f0,stroke:#f6821f,stroke-width:2px
style SDKSpace fill:#f5f5f5,stroke:#666,stroke-width:2px,stroke-dasharray: 5 5
style Worker fill:#ffe8d1,stroke:#f6821f,stroke-width:2px
style DO fill:#dce9f7,stroke:#1d8cf8,stroke-width:2px
style Container fill:#d4f4e2,stroke:#17b26a,stroke-width:2px
Vrstva 1: Klientský SDK
API určené pro vývojáře, které používáte ve svých Workerech:
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
const result = await sandbox.exec("python script.py");Účel: Poskytuje přehledné a typově bezpečné rozhraní TypeScript pro všechny operace se sandboxem.
Vrstva 2: Durable Object
Spravuje životní cyklus sandboxu a směrování:
export class Sandbox extends DurableObject<Env> {
// Extends Cloudflare Container for isolation
// Routes requests between client and container
// Manages preview URLs and state
}Účel: Poskytuje trvalé, stavové instance sandboxu s jedinečnou identitou.
Proč Durable Objects:
- Trvalá identita - Stejné ID sandboxu vždy směruje na stejnou instanci
- Správa kontejnerů - Durable Object vlastní kontejner a řídí jeho životní cyklus
- Geografické rozložení - Sandboxy běží v blízkosti uživatelů
- Automatické škálování - Cloudflare se stará o zajištění infrastruktury
Vrstva 3: Container Runtime
Spouští kód izolovaně s plnou funkcionalitou Linuxu.
Účel: Bezpečně spouští nedůvěryhodný kód.
Proč kontejnery:
- Izolace založená na VM - Každý sandbox běží ve vlastním VM
- Úplné prostředí - Ubuntu Linux s Pythonem, Node.js, Gitem atd.
Komunikační přenosové režimy
SDK podporuje tři přenosové protokoly pro komunikaci mezi Durable Object a kontejnerem:
HTTP transport (výchozí)
Každá metoda SDK provede samostatný požadavek HTTP na API kontejneru. Je to jednoduché, spolehlivé a vyhovuje většině případů užití.
// Default behavior - uses HTTP
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
await sandbox.exec("python script.py");Transport RPC
Multiplexuje všechna volání SDK přes jedno trvalé spojení. Vyhýbá se tak limity subrequestů při provádění mnoha souběžných operací.
RPC transport povolíte nastavením SANDBOX_TRANSPORT proměnnou v konfiguraci svého Workeru:
{
"vars": {
"SANDBOX_TRANSPORT": "rpc"
},
}[vars]
SANDBOX_TRANSPORT = "rpc"WebSocket transport
WebSocket transport je zastaralý. Pro nové aplikace použijte RPC transport.
Vrstva přenosu je pro kód vaší aplikace transparentní: všechny metody SDK fungují stejně bez ohledu na typ přenosu. Podrobnosti o tom, kdy použít který typ přenosu, a příklady konfigurace najdete v Režimy transportu.
Tok požadavku
Když spustíte příkaz:
await sandbox.exec("python script.py");Průběh HTTP transportu:
- Client SDK ověří parametry a odešle požadavek HTTP na Durable Object
- Durable Object ověří a přepošle požadavek HTTP do kontejneru
- Runtime kontejneru ověří vstupy, spustí příkaz a zachytí výstup
- Odpověď se vrací zpět všemi vrstvami se správnou transformací chyb
Průběh RPC transportu:
- Client SDK ověří parametry a odešle požadavek na Durable Object
- Durable Object udržuje trvalé připojení ke kontejneru a multiplexuje souběžné požadavky
- Runtime kontejneru převádí zprávy RPC na zpracování požadavků a odpovědí ve stylu HTTP
- Odpověď se vrací zpět přes stejné připojení se správnou transformací chyb
Durable Object naváže trvalé připojení ke kontejneru při prvním volání SDK a dál ho využívá pro všechny další operace, čímž se snižuje režie u často opakovaných operací.
Související zdroje
- Životní cyklus sandboxu - Jak se sandboxy vytvářejí a spravují
- Runtime kontejneru - Uvnitř prostředí pro spouštění
- Bezpečnostní model - Jak fungují izolace a validace
- Správa relací - Pokročilá správa stavu