サンドボックスディレクトリの特定時点のスナップショットを作成し、R2 から復元します。
セットアップ、復元の流れ、生成キャッシュの除外は バックアップと復元 を参照してください。オーバーレイの意味は ディレクトリのバックアップ を参照してください。
ディレクトリのスナップショットを作成し、R2 にアップロードします。
await sandbox.createBackup(options: BackupOptions): Promise<DirectoryBackup>パラメーター:
options- バックアップ設定(BackupOptionsを参照):dir(必須) - バックアップする絶対パス。/workspace、/home、/tmp、/var/tmp、/app配下である必要があります。name(任意) - 人が読める名前。最大 256 文字。制御文字は拒否されます。ttl(任意) - 有効期間(秒)。デフォルト:259200(3 日)。正の数である必要があります。gitignore(任意) -trueのとき、dirが git リポジトリ内なら.gitignore規則に一致するパスを除外します。デフォルト:false。ディレクトリが git リポジトリ内にない場合、git による除外は適用されません。gitがインストールされていない場合、SDK は警告をログに出し、git ベースの除外なしで続行します。excludes(任意) - アーカイブから省く glob パターン。mksquashfsのワイルドカード除外として渡されます。**の globstar は自動で正規化されます。デフォルト:[]。localBucket(任意) -trueのとき、署名付き URL ではなくBACKUP_BUCKETR2 バインディングを使います。wrangler dev向けです。デフォルト:false。compression(任意) - アーカイブの圧縮。デフォルトの形式:lz4。デフォルトのスレッド数:8。形式はgzip、lz4、zstdのいずれかです。threadsは正の整数である必要があります。multipart(任意) - 大きなアーカイブに並列のマルチパートアップロードを使います。デフォルト:true。
戻り値: Promise<DirectoryBackup>。次を含みます:
id- 一意のバックアップ識別子(UUID)dir- バックアップしたディレクトリlocalBucket(任意) - ローカルの R2 バインディングモードを使ったかどうか
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
const backup = await sandbox.createBackup({ dir: "/workspace" });
await sandbox.restoreBackup(backup);import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
const backup = await sandbox.createBackup({ dir: "/workspace" });
await sandbox.restoreBackup(backup);仕組み:
本番では:
- コンテナが圧縮した squashfs アーカイブを作成します。
- コンテナが署名付き URL でアーカイブを R2 にアップロードします。
- メタデータはアーカイブと同じ場所に R2 へ保存されます。
- ローカルのアーカイブは削除されます。
localBucket: true の場合:
- コンテナが圧縮した squashfs アーカイブを作成します。
- アーカイブは
BACKUP_BUCKETR2 バインディング経由でアップロードされます。 - メタデータはアーカイブと同じ場所に R2 へ保存されます。
- ローカルのアーカイブは削除されます。
例外:
InvalidBackupConfigError-dirが許可された絶対パスでない、BACKUP_BUCKETバインディングがない、または(本番で)R2 の署名付き URL 認証情報が設定されていない場合BackupCreateError- アーカイブ作成または R2 へのアップロードが失敗した場合
以前作成したバックアップを復元します。
await sandbox.restoreBackup(backup: DirectoryBackup): Promise<RestoreBackupResult>パラメーター:
backup-createBackup()が返すハンドル。idとdirを含みます。復元先はbackup.dirで、元のバックアップパスと異なることがあります(DirectoryBackupを参照)。
戻り値: Promise<RestoreBackupResult>。次を含みます:
success- 復元が成功したかどうかdir- 復元したディレクトリid- 復元したバックアップ ID
await sandbox.restoreBackup(backup);await sandbox.restoreBackup(backup);仕組み:
本番では:
- R2 からメタデータをダウンロードし、60 秒のバッファ付きで TTL を確認します。期限切れのバックアップは例外を投げます。
- コンテナが署名付き URL で R2 からアーカイブをダウンロードします。
- コンテナが FUSE overlayfs でアーカイブをマウントします。
localBucket: true の場合:
BACKUP_BUCKETバインディングからメタデータをダウンロードし、TTL を確認します。- R2 バインディングからアーカイブをダウンロードします。
unsquashfsでアーカイブを展開します。
例外:
InvalidBackupConfigError-backup.idがない、UUID でない、またはbackup.dirが無効な場合BackupNotFoundError- メタデータまたはアーカイブが R2 にない場合BackupExpiredError- TTL が経過した場合BackupRestoreError- コンテナが復元に失敗した場合
- 同じサンドボックスでのバックアップと復元の同時実行は直列化されます。
DirectoryBackupはシリアライズできます。KV、D1、または Durable Object のストレージに保存します。- 重なり合うバックアップは独立しています。親ディレクトリを復元すると、サブディレクトリのマウントは上書きされます。両方を復元する場合は、先に親を復元します。
ttlは復元時にだけ適用されます。期限切れのオブジェクトは、削除するか R2 のライフサイクルルール が消すまで R2 に残ります。- バックアップオブジェクトは
backups/{id}/data.sqshとbackups/{id}/meta.jsonを使います。
interface BackupCompressionOptions {
format?: "gzip" | "lz4" | "zstd";
threads?: number;
}
interface BackupOptions {
dir: string;
name?: string;
ttl?: number;
gitignore?: boolean;
excludes?: string[];
localBucket?: boolean;
compression?: BackupCompressionOptions;
multipart?: boolean;
}フィールド:
dir(必須) -/workspace、/home、/tmp、/var/tmp、/app配下の絶対パスname(任意) - 人が読める名前。最大 256 文字。制御文字は使えません。ttl(任意) - 有効期間(秒)。デフォルト:259200(3 日)。正の数である必要があります。gitignore(任意) -trueのとき、dirが git リポジトリ内なら.gitignoreの一致を除外します。デフォルト:false。excludes(任意) - 省く glob パターン。例:['node_modules/.cache', '*.log']。生成キャッシュを除外する を参照してください。localBucket(任意) - 署名付き URL ではなくBACKUP_BUCKETバインディングを使います。デフォルト:false。compression(任意) -formatのデフォルトはlz4。threadsのデフォルトは8。multipart(任意) - 並列のマルチパートアップロード。デフォルト:true。
interface DirectoryBackup {
readonly id: string;
readonly dir: string;
readonly localBucket?: boolean;
}フィールド:
id- 一意のバックアップ識別子(UUID)dir- 復元先ディレクトリlocalBucket(任意) - ローカルの R2 バインディングモードを使ったかどうか
interface RestoreBackupResult {
success: boolean;
dir: string;
id: string;
}フィールド:
success- 復元が成功したかどうかdir- 復元したディレクトリid- 復元したバックアップ ID
- バックアップと復元 - セットアップと復元の流れ
- ディレクトリのバックアップ - オーバーレイ復元と
EXDEV - Storage API - S3 互換バケットのマウント
- Files API - ファイルの読み書き
- Wrangler の設定 - バインディングの設定