← Sandbox SDK / sandbox / api
Zálohy
Vytvářejte snímky adresářů sandboxu v daném okamžiku a obnovujte je pomocí překryvů copy-on-write.
Metody
createBackup()
Vytvoří časový snímek adresáře a nahraje ho do úložiště R2.
await sandbox.createBackup(options: BackupOptions): Promise<DirectoryBackup>Parametry:
options- Konfigurace zálohování (vizBackupOptions):dir(povinné) - Absolutní cesta k adresáři, který se má zálohovat (například"/workspace")name(volitelné) - Čitelný název zálohy. Maximálně 256 znaků, bez řídicích znaků.ttl(volitelné) - Doba platnosti v sekundách, po které záloha vyprší. Výchozí hodnota:259200(3 dny). Musí být kladné číslo.useGitignore(volitelné) - Pokudtrue, vyloučí soubory odpovídající.gitignorepravidla ze zálohy. Výchozí hodnota:false. Pokud se adresář nenachází uvnitř repozitáře git, neuplatní se žádná vyloučení. Vyžadujegitaby byl v kontejneru k dispozici.localBucket(volitelné) - Pokudtrue, používáBACKUP_BUCKETR2 binding přímo místo presigned URL adres. Určeno pro použití swrangler dev. Výchozí hodnota:false.
Vrací: Promise<DirectoryBackup> obsahující:
id- Jedinečný identifikátor zálohy (UUID)dir- Adresář, který byl zálohován
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Create a backup of /workspace
const backup = await sandbox.createBackup({ dir: "/workspace" });
// Later, restore the backup
await sandbox.restoreBackup(backup);import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Create a backup of /workspace
const backup = await sandbox.createBackup({ dir: "/workspace" });
// Later, restore the backup
await sandbox.restoreBackup(backup);Jak to funguje:
V produkčním prostředí:
- Kontejner vytvoří z adresáře komprimovaný archiv squashfs.
- Kontejner nahraje archiv přímo do R2 pomocí předpodepsané URL.
- Metadata se ukládají spolu s archivem v R2.
- Lokální archiv se následně smaže.
S localBucket: true (lokální vývoj):
- Kontejner vytvoří z adresáře komprimovaný archiv squashfs.
- Archiv se nahraje přímo do
BACKUP_BUCKETR2 binding. - Metadata se ukládají spolu s archivem v R2.
- Lokální archiv se následně smaže.
Vyhazuje:
InvalidBackupConfigError- Pokuddirnení absolutní, obsahuje..,BACKUP_BUCKETvazba chybí, nebo (v produkčním prostředí) nejsou nastaveny přihlašovací údaje pro předem podepsanou URL R2BackupCreateError- Pokud se kontejneru nepodaří vytvořit archiv, nahrání do R2 selže, nebouseGitignorejetruealegitnení v kontejneru k dispozici
restoreBackup()
Obnoví dříve vytvořenou zálohu do adresáře.
await sandbox.restoreBackup(backup: DirectoryBackup): Promise<RestoreBackupResult>Parametry:
backup- Handle zálohy vrácenýcreateBackup(). Obsahujeidadir. (vizDirectoryBackup)
Vrací: Promise<RestoreBackupResult> obsahující:
success- Zda se obnovení zdařilodir- Adresář, který byl obnovenid- ID zálohy, která byla obnovena
// Create a named backup with 24-hour TTL
const backup = await sandbox.createBackup({
dir: "/workspace",
name: "before-refactor",
ttl: 86400,
});
// Store the handle for later use
await env.KV.put(`backup:${userId}`, JSON.stringify(backup));// Create a named backup with 24-hour TTL
const backup = await sandbox.createBackup({
dir: "/workspace",
name: "before-refactor",
ttl: 86400,
});
// Store the handle for later use
await env.KV.put(`backup:${userId}`, JSON.stringify(backup));Jak to funguje:
V produkčním prostředí:
- Metadata se stáhnou z R2 a zkontroluje se TTL. Pokud vypršela, vyvolá se chyba (s 60sekundovou rezervou).
- Kontejner stáhne archiv přímo z R2 pomocí předpodepsané URL.
- Kontejner připojí archiv squashfs pomocí FUSE overlayfs.
S localBucket: true (lokální vývoj):
- Metadata se stahují z
BACKUP_BUCKETR2 binding a kontroluje se TTL. - Archiv se stáhne z vazby R2.
- Archiv se rozbalí do cílového adresáře pomocí
unsquashfs.
Vyhazuje:
InvalidBackupConfigError- Pokudbackup.idchybí nebo není platné UUID, nebobackup.dirje neplatnýBackupNotFoundError- Pokud metadata nebo archiv zálohy nejsou v R2 nalezenyBackupExpiredError- Pokud vypršel TTL zálohyBackupRestoreError- Pokud se kontejneru nepodaří obnovit data
Způsoby použití
Vyloučit soubory z .gitignore
Použijte useGitignore pro vyloučení souborů odpovídajících .gitignore pravidla (například node_modules/ nebo dist/) ze zálohy. Tím se u git repozitářů zmenší velikost zálohy.
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Exclude gitignored files from the backup
const backup = await sandbox.createBackup({
dir: "/workspace",
useGitignore: true,
});
// Without useGitignore (default), all files are included
const fullBackup = await sandbox.createBackup({
dir: "/workspace",
});const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Exclude gitignored files from the backup
const backup = await sandbox.createBackup({
dir: "/workspace",
useGitignore: true,
});
// Without useGitignore (default), all files are included
const fullBackup = await sandbox.createBackup({
dir: "/workspace",
});Pokud adresář neleží uvnitř repozitáře git, useGitignore nemá žádný účinek a jsou zahrnuty všechny soubory. Pokud useGitignore je true ale git není v kontejneru nainstalovaný, BackupCreateError je vyvolána.
Checkpoint a obnovení
Používejte zálohy jako kontrolní body před rizikovými operacemi.
// Save checkpoint before risky operation
const checkpoint = await sandbox.createBackup({ dir: "/workspace" });
try {
await sandbox.exec("npm install some-experimental-package");
await sandbox.exec("npm run build");
} catch (error) {
// Restore to the checkpoint if something goes wrong
await sandbox.restoreBackup(checkpoint);
}// Save checkpoint before risky operation
const checkpoint = await sandbox.createBackup({ dir: "/workspace" });
try {
await sandbox.exec("npm install some-experimental-package");
await sandbox.exec("npm run build");
} catch (error) {
// Restore to the checkpoint if something goes wrong
await sandbox.restoreBackup(checkpoint);
}Zpracování chyb
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
try {
const backup = await sandbox.createBackup({ dir: "/workspace" });
console.log(`Backup created: ${backup.id}`);
} catch (error) {
if (error.code === "INVALID_BACKUP_CONFIG") {
console.error("Configuration error:", error.message);
} else if (error.code === "BACKUP_CREATE_FAILED") {
console.error("Backup failed:", error.message);
}
}import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
try {
const backup = await sandbox.createBackup({ dir: "/workspace" });
console.log(`Backup created: ${backup.id}`);
} catch (error) {
if (error.code === "INVALID_BACKUP_CONFIG") {
console.error("Configuration error:", error.message);
} else if (error.code === "BACKUP_CREATE_FAILED") {
console.error("Backup failed:", error.message);
}
}Chování
- Souběžné operace zálohování a obnovy nad stejným sandboxem se automaticky serializují.
- Vrácený
DirectoryBackuphandle je serializovatelný: uložte ho do úložiště KV, D1 nebo Durable Object. - Překrývající se zálohy jsou nezávislé. Obnovení nadřazeného adresáře přepíše připojení podadresářů.
Vynucování TTL
ttl hodnota určuje, kdy je záloha považována za expirovanou. SDK toto vynucuje na pouze čas obnovy : při volání restoreBackup(), SDK načte metadata zálohy z R2 a zkontroluje, zda uplynula platnost TTL. Pokud ano, obnovení se odmítne s chybou BACKUP_EXPIRED chyba.
TTL ne automaticky mazal objekty z R2. Archivy záloh a metadata s vypršenou platností zůstávají v R2 bucketu, dokud je neodstraníte. Pro automatické čištění objektů s vypršenou platností nastavte Pravidlo životního cyklu objektu R2 na vašem záložním bucketu. Bez pravidla životního cyklu budou expirované zálohy nadále zabírat úložiště R2.
Typy
BackupOptions
interface BackupOptions {
dir: string;
name?: string;
ttl?: number;
useGitignore?: boolean;
localBucket?: boolean;
}Pole:
dir(povinné) - Absolutní cesta k adresáři, který se má zálohovatname(volitelné) - Čitelný název zálohy. Maximálně 256 znaků, bez řídicích znaků.ttl(volitelné) - Doba platnosti v sekundách. Výchozí hodnota:259200(3 dny). Musí být kladné číslo.useGitignore(volitelné) - Pokudtrue, vyloučí soubory odpovídající.gitignorepravidla, pokud se adresář nachází uvnitř gitového repozitáře. Výchozí hodnota:false. Pokud se adresář nenachází uvnitř repozitáře git, neuplatní se žádná vyloučení založená na git.localBucket(volitelné) - Pokudtrue, používáBACKUP_BUCKETR2 binding přímo místo presigned URL adres. Určeno pro použití swrangler dev. Výchozí hodnota:false.
DirectoryBackup
interface DirectoryBackup {
readonly id: string;
readonly dir: string;
}Pole:
id- Jedinečný identifikátor zálohy (UUID)dir- Adresář, který byl zálohován
RestoreBackupResult
interface RestoreBackupResult {
success: boolean;
dir: string;
id: string;
}Pole:
success- Zda se obnovení zdařilodir- Adresář, který byl obnovenid- ID zálohy, která byla obnovena
Související zdroje
- Storage API - Připojení bucketů kompatibilních s S3
- API souborů - Čtení a zápis souborů
- Konfigurace Wrangleru - Nakonfigurujte bindings