← Sandbox SDK / sandbox / configuration
Proměnné prostředí
Konfiguraci, tajné klíče a nastavení runtime předávejte do sandboxů pomocí proměnných prostředí.
Konfigurační proměnné SDK
Tyto proměnné prostředí určují chování Sandbox SDK. Nastavte je jako Worker vars ve vašem wrangler.jsonc soubor. SDK je načítá z vazeb prostředí Workeru.
SANDBOX_TRANSPORT
| Typ | "http" | "websocket" | "rpc" |
| Výchozí | "http" |
Určuje transportní protokol pro komunikaci mezi SDK a kontejnerem. Přenos RPC multiplexuje všechny operace přes jediné trvalé připojení, čímž se vyhne limity subrequestů při provádění mnoha operací SDK v rámci jednoho požadavku.
{
"vars": {
"SANDBOX_TRANSPORT": "rpc"
}
}[vars]
SANDBOX_TRANSPORT = "rpc"Úplného průvodce s platnými režimy transportu, doporučeními k výkonu a pokyny k migraci najdete v Režimy transportu.
COMMAND_TIMEOUT_MS
| Typ | number (milisekundy) |
| Výchozí | Žádné (bez časového limitu) |
Nastaví globální výchozí časový limit pro každý exec() volání. Pokud je nastaveno, každý příkaz, který tuto dobu překročí, vyvolá chybu na straně volajícího a ukončí spojení.
Pro jednotlivé příkazy timeout na exec() a na úrovni relace commandTimeoutMs na createSession() obě tuto hodnotu přepisují. Podrobnosti o prioritě timeoutů najdete v Spouštění příkazů: časové limity.
{
"vars": {
"COMMAND_TIMEOUT_MS": "30000"
}
}[vars]
COMMAND_TIMEOUT_MS = "30000"Tři způsoby nastavení proměnných prostředí
Sandbox SDK nabízí tři způsoby nastavení proměnných prostředí, každý vhodný pro jiný případ použití:
1. Na úrovni sandboxu pomocí setEnvVars()
Nastavte proměnné prostředí globálně pro všechny příkazy v sandboxu:
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Set once, available for all subsequent commands
await sandbox.setEnvVars({
DATABASE_URL: env.DATABASE_URL,
API_KEY: env.API_KEY,
});
await sandbox.exec("python migrate.py"); // Has DATABASE_URL and API_KEY
await sandbox.exec("python seed.py"); // Has DATABASE_URL and API_KEY
// Unset variables by passing undefined
await sandbox.setEnvVars({
API_KEY: "new-key", // Updates API_KEY
OLD_SECRET: undefined, // Unsets OLD_SECRET
});Použijte, když: Potřebujete stejné proměnné prostředí pro více příkazů.
Rušení proměnných: Předejte undefined nebo null ke zrušení nastavení proměnných prostředí:
await sandbox.setEnvVars({
API_KEY: 'new-key', // Sets API_KEY
OLD_SECRET: undefined, // Unsets OLD_SECRET
DEBUG_MODE: null // Unsets DEBUG_MODE
});2. U jednotlivých příkazů pomocí voleb exec()
Předejte proměnné prostředí pro konkrétní příkaz:
await sandbox.exec("node app.js", {
env: {
NODE_ENV: "production",
PORT: "3000",
},
});
// Also works with startProcess()
await sandbox.startProcess("python server.py", {
env: {
DATABASE_URL: env.DATABASE_URL,
},
});Použijte, když: Potřebujete pro různé příkazy jiné proměnné prostředí, nebo chcete přepsat proměnné na úrovni sandboxu.
3. Na úrovni session pomocí createSession()
Vytvořte izolovanou relaci s vlastními proměnnými prostředí:
const session = await sandbox.createSession({
env: {
DATABASE_URL: env.DATABASE_URL,
SECRET_KEY: env.SECRET_KEY,
},
});
// All commands in this session have these vars
await session.exec("python migrate.py");
await session.exec("python seed.py");Použijte, když: Potřebujete izolované kontexty spouštění s různými proměnnými prostředí, které běží souběžně.
Rušení proměnných prostředí
Sandbox SDK umožňuje zrušit nastavení proměnných prostředí předáním undefined nebo null hodnoty. To umožňuje používat idiomatické vzory JavaScriptu pro správu konfigurace:
await sandbox.setEnvVars({
// Set new values
API_KEY: 'new-key',
DATABASE_URL: env.DATABASE_URL,
// Unset variables (removes them from the environment)
OLD_API_KEY: undefined,
TEMP_TOKEN: null
});Před touto změnou: Předání undefined hodnoty by vyvolaly chybu za běhu.
Po této změně: undefined a null hodnoty spustí unset VARIABLE_NAME v shellu.
Případy použití pro zrušení proměnných
Po použití odstraňte citlivá data:
// Use a temporary token
await sandbox.setEnvVars({ TEMP_TOKEN: 'abc123' });
await sandbox.exec('curl -H "Authorization: $TEMP_TOKEN" api.example.com');
// Clean up the token
await sandbox.setEnvVars({ TEMP_TOKEN: undefined });Podmíněné nastavení prostředí:
await sandbox.setEnvVars({
API_KEY: env.API_KEY,
DEBUG_MODE: env.NODE_ENV === 'development' ? 'true' : undefined,
PROFILING: env.ENABLE_PROFILING ? 'true' : undefined
});Obnovte výchozí nastavení systému:
// Unset to fall back to container's default NODE_ENV
await sandbox.setEnvVars({ NODE_ENV: undefined });Běžné vzory
Předejte tajné klíče Workeru do sandboxu
Bezpečně předejte secrets z vašeho Workeru do sandboxu. Nejprve nastavte secrets pomocí Wrangler:
wrangler secret put OPENAI_API_KEY
wrangler secret put DATABASE_URLPoté je předejte svému sandboxu:
import { getSandbox } from "@cloudflare/sandbox";
export { Sandbox } from "@cloudflare/sandbox";
interface Env {
Sandbox: DurableObjectNamespace<Sandbox>;
OPENAI_API_KEY: string;
DATABASE_URL: string;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const sandbox = getSandbox(env.Sandbox, "user-sandbox");
// Option 1: Set globally for all commands
await sandbox.setEnvVars({
OPENAI_API_KEY: env.OPENAI_API_KEY,
DATABASE_URL: env.DATABASE_URL,
});
await sandbox.exec("python analyze.py");
// Option 2: Pass per-command
await sandbox.exec("python analyze.py", {
env: {
OPENAI_API_KEY: env.OPENAI_API_KEY,
},
});
return Response.json({ success: true });
},
};Kombinace výchozích a specifických proměnných
const defaults = { NODE_ENV: "production", LOG_LEVEL: "info" };
await sandbox.exec("npm start", {
env: { ...defaults, PORT: "3000", API_KEY: env.API_KEY },
});Více izolovaných relací
Souběžně spouštějte různé úlohy s různými proměnnými prostředí:
// Production database session
const prodSession = await sandbox.createSession({
env: { DATABASE_URL: env.PROD_DATABASE_URL },
});
// Staging database session
const stagingSession = await sandbox.createSession({
env: { DATABASE_URL: env.STAGING_DATABASE_URL },
});
// Run migrations on both concurrently
await Promise.all([
prodSession.exec("python migrate.py"),
stagingSession.exec("python migrate.py"),
]);Nakonfigurujte přenosový režim
Nastavte SANDBOX_TRANSPORT ve vašem Workeru vars k přepínání mezi přenosem HTTP, WebSocket a RPC. Podrobnosti o tom, kdy a jak nastavit jednotlivé přenosy, najdete v Režimy transportu.
Přihlašovací údaje pro připojení bucketu
Při připojování úložiště objektů kompatibilního s S3 SDK používá s3fs-fuse interně, což vyžaduje přihlašovací údaje ve stylu AWS. Pro R2 vygenerujte API tokeny v Cloudflare dashboardu a zadejte je pomocí názvů proměnných prostředí ve stylu AWS:
Získejte tokeny R2 API:
- Přejděte na R2 > Přehled ↗ v dashboardu Cloudflare
- Vyberte Správa tokenů R2 API
- Vytvořte token s Object Read & Write oprávnění
- Zkopírujte Access Key ID a Secret Access Key
Nastavte přihlašovací údaje jako tajné klíče Workeru:
wrangler secret put AWS_ACCESS_KEY_ID
# Paste your R2 Access Key ID
wrangler secret put AWS_SECRET_ACCESS_KEY
# Paste your R2 Secret Access KeyPřipojte buckety s automatickou detekcí přihlašovacích údajů:
import { getSandbox } from "@cloudflare/sandbox";
export { Sandbox } from "@cloudflare/sandbox";
interface Env {
Sandbox: DurableObjectNamespace<Sandbox>;
AWS_ACCESS_KEY_ID: string;
AWS_SECRET_ACCESS_KEY: string;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const sandbox = getSandbox(env.Sandbox, "data-processor");
// Credentials automatically detected from environment
await sandbox.mountBucket("my-r2-bucket", "/data", {
endpoint: "https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com",
});
// Access mounted bucket using standard file operations
await sandbox.exec("python", { args: ["process.py", "/data/input.csv"] });
return Response.json({ success: true });
},
};SDK automaticky rozpoznává AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY z prostředí vašeho Workeru při volání mountBucket() bez explicitních přihlašovacích údajů.
Předávejte přihlašovací údaje explicitně (pokud používáte vlastní názvy tajných klíčů):
await sandbox.mountBucket("my-r2-bucket", "/data", {
endpoint: "https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com",
credentials: {
accessKeyId: env.R2_ACCESS_KEY_ID,
secretAccessKey: env.R2_SECRET_ACCESS_KEY,
},
});Viz Průvodce připojováním bucketů pro úplnou dokumentaci k připojování bucketů.
Priorita proměnných prostředí
Pokud je stejná proměnná nastavena na více úrovních, má přednost ta nejspecifičtější:
- Na úrovni příkazu (nejvyšší) - Předává se do
exec()nebostartProcess()možnosti - Na úrovni sandboxu nebo relace - Nastavte pomocí
setEnvVars() - Výchozí kontejner - Zabudováno do Docker image pomocí
ENV - Výchozí systémové nastavení (nejnižší) - Výchozí hodnoty operačního systému
Příklad:
// In Dockerfile: ENV NODE_ENV=development
// Sandbox-level
await sandbox.setEnvVars({ NODE_ENV: "staging" });
// Command-level overrides all
await sandbox.exec("node app.js", {
env: { NODE_ENV: "production" }, // This wins
});Související zdroje
- Režimy transportu - Nakonfigurujte transport HTTP, WebSocket a RPC
- Konfigurace Wrangleru - Nastavení prostředí na úrovni Workeru
- Tajné klíče - Správa citlivých dat
- Sessions API - Proměnné prostředí na úrovni relace
- Bezpečnostní model - Pochopení izolace dat
- Zpracování odchozího provozu - Udržujte přihlašovací údaje mimo sandbox pomocí obslužných rutin pro odchozí připojení