← Sandbox SDK / sandbox / 1-0-preview
Začínáme
1. Nainstalujte preview balíček
V projektu Workers, který již používá Sandbox, nebo v novém projektu založeném na šabloně Sandbox:
npm i @cloudflare/sandbox@nextVytvořte a nasaďte Worker a image kontejneru sandboxu ze stejné náhledové řady.
2. Exportujte třídu Sandbox
import { Sandbox } from "@cloudflare/sandbox";
export { Sandbox };import { Sandbox } from "@cloudflare/sandbox";
export { Sandbox };Udržujte svůj wrangler Durable Object binding a konfigurace kontejneru. Proměnné přenosu specifické pro náhled nejsou vyžadovány.
3. Spusťte proces
exec() spustí program z argv : pole s cestou nebo názvem spustitelného souboru, a poté jeho argumenty. Čeká, dokud sandbox nebude moci proces spustit, poté vrátí handle procesu. Ano, ne počkejte, až proces skončí.
Shromážděte výsledky pomocí metod handle, jako například output(), nebo streamujte pomocí logs().
import { getSandbox, proxyToSandbox } from "@cloudflare/sandbox";
export { Sandbox } from "@cloudflare/sandbox";
export default {
async fetch(request, env) {
const proxy = await proxyToSandbox(request, env);
if (proxy) return proxy;
const sandbox = getSandbox(env.Sandbox, "preview-demo");
const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
const output = await process.output({ encoding: "utf8" });
return Response.json({
id: process.id,
pid: process.pid,
stdout: output.stdout,
exitCode: output.exitCode,
});
},
};import { getSandbox, proxyToSandbox } from "@cloudflare/sandbox";
export { Sandbox } from "@cloudflare/sandbox";
type Env = {
Sandbox: DurableObjectNamespace<import("@cloudflare/sandbox").Sandbox>;
};
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const proxy = await proxyToSandbox(request, env);
if (proxy) return proxy;
const sandbox = getSandbox(env.Sandbox, "preview-demo");
const process = await sandbox.exec(["python3", "-c", "print(2 + 2)"]);
const output = await process.output({ encoding: "utf8" });
return Response.json({
id: process.id,
pid: process.pid,
stdout: output.stdout,
exitCode: output.exitCode,
});
},
};Každá položka argv je jeden argument procesu. SDK ne spustí shell a provede ne escapuje argv stejně jako shell. Mezery a speciální znaky uvnitř položky zůstanou součástí daného argumentu.
Syntaxe shellu (&&, roury, přesměrování, globy) vyžaduje explicitní shell se skriptem jako samostatným argumentem:
const process = await sandbox.exec([
"/bin/bash",
"-lc",
"echo hello && uname -a",
]);
const { stdout } = await process.output({ encoding: "utf8" });const process = await sandbox.exec([
"/bin/bash",
"-lc",
"echo hello && uname -a",
]);
const { stdout } = await process.output({ encoding: "utf8" });4. Jak se to liší od stabilního balíčku
await sandbox.exec(...)vytvoří proces. Přitom ne počkejte na ukončení. Použijteoutput(),waitForExit(), nebo jiné metody handle pro dokončení.- Každý
exec()je nezávislý.cdneboexportv jednom volání se v dalším nezapamatuje. - Předejte
cwdaenvpři každémexec()když je potřebujete, nebo použijtesetEnvVarspro hodnoty platné pro celý sandbox. Viz Proměnné prostředí. - Proces běží pouze v aktuální kontejner pro daný sandbox. Jakmile se kontejner zastaví nebo je nahrazen, spusťte nový proces. Model: Životní cyklus sandboxu.
- Než nasadíte do produkčního provozu, zjistěte, které chyby lze bezpečně opakovat: Chyby a zotavení.
Next
- Životní cyklus sandboxu : ID sandboxu, kontejner, zastavení a výměna
- Provádění procesů,
exec(), handles a pokračování práce napříč požadavky - Chyby a zotavení : opakované pokusy, přerušená volání a zastaralé handly
- Migrace : aktualizace existující stabilní aplikace
- Referenční dokumentace API : procesy, terminály a chyby
- Terminály : interaktivní PTY a připojení prohlížeče
- Rozšíření