tigris-snapshots-recovery について
Tigris オブジェクトストレージのスナップショットと時点履歴を使ってファイルを復元するスキルです。自動バージョン追跡、名前付きスナップショット、復元手順を扱い、バケット作成時にスナップショットを有効にする必要がある点も説明します。
主な機能
- 01変更・削除されたオブジェクトの復元
- 02オブジェクトバージョンの自動追跡
- 03名前付きスナップショットの作成と一覧表示
- 04指定時点からの復元
- 05バケット設定と移行のガイド
活用シーン
- 01上書きされた設定ファイルの復旧
- 02誤って削除したオブジェクトの復元
- 03デプロイや移行の時点を記録
- 04スナップショット対応バケットへのデータ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tigrisdata/ skills --skill tigris-snapshots-recoveryインストール後、Claude Code で/tigris-snapshots-recoveryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonREADME.mdresources/go-examples.mdpython-examples.mdrestore-workflows.md詳細
Tigris のスナップショットとポイントインタイムリカバリ
任意の時点から削除または変更されたファイルを復元できます。スナップショットが有効な Tigris バケットでは、すべての変更が自動的に追跡されるため、明示的にスナップショットを作成していなくてもファイルを復元できます。
前提条件
何よりも先に、まだ利用できない場合は Tigris CLI をインストールしてください。
tigris help || npm install -g @tigrisdata/cli
インストールが必要な場合は、ユーザーに「Tigris のオブジェクトストレージを操作するため、Tigris CLI(@tigrisdata/cli)をインストールします。」と伝えてください。
主なポイント
- スナップショットはバケットの作成時に有効にする必要があります。 既存のバケットでスナップショットを有効にすることはできません。スナップショットを有効にした新しいバケットを作成する必要があります。
- すべての変更が自動的に追跡されます。 明示的にスナップショットを作成しなくても、すべてのアップロード、削除、上書きが保持されます。任意の時点のオブジェクトを復元できます。
- 明示的なスナップショットは任意のブックマークです。 名前付きスナップショットを作成すると、参照しやすいように時点を記録できます。いずれにしても、データはすでに保持されています。
- スナップショットバケットでは STANDARD ストレージ階層を使用する必要があります。 スナップショットが有効なバケットでは、ライフサイクルによる階層移行と TTL はサポートされていません。
スナップショットを有効にしたバケットを作成する
# New bucket with snapshots enabled
tigris buckets create my-bucket --snapshot
# ⚠ This will NOT work — cannot enable snapshots on existing bucket
# tigris buckets update my-bucket --snapshot ← NOT SUPPORTED
import { createBucket } from "@tigrisdata/storage";
const result = await createBucket("my-bucket", {
enableSnapshot: true,
});
既存のバケットを移行する
既存のバケットでスナップショットを利用するには、新しいバケットを作成してコピーします。
tigris buckets create my-bucket-v2 --snapshot
tigris cp t3://my-bucket/ t3://my-bucket-v2/ -r
# Update your app to use the new bucket name
tigris buckets delete my-bucket # when ready
自動追跡の仕組み
スナップショットを有効にすると、Tigris はすべてのオブジェクトのすべてのバージョンを保持します。
Timeline:
T1: put("config.json", v1) → v1 stored
T2: put("config.json", v2) → v2 stored, v1 still accessible
T3: remove("config.json") → deleted, but v1 and v2 still accessible
T4: put("config.json", v3) → v3 stored, v1, v2, and deletion all accessible
スナップショットから復元する
一般的な復元ワークフローでは、スナップショットを一覧表示し、対象を選んで、そこからファイルを復元します。
import { listBucketSnapshots, get, put } from "@tigrisdata/storage";
// 1. List snapshots
const result = await listBucketSnapshots("my-bucket");
// 2. Find the right one
const target = result.data?.find((s) => s.name === "before-deploy-v2.3");
const snapshotVersion = target!.version;
// 3. Read a file at that snapshot and write it back
const old = await get("config.json", "string", { snapshotVersion });
if (!old.error) {
await put("config.json", old.data, { contentType: "application/json" });
}
バケット全体の復元、プレフィックスの復元、タイムスタンプによる復旧、スナップショットの比較など、完全なワークフローについては ./resources/restore-workflows.md を参照してください。
Go SDK の例については ./resources/go-examples.md を参照してください。
Python(tigris-boto3-ext)の例については ./resources/python-examples.md を参照してください。Python の全機能(boto3 のセットアップ、Django、Bundle API)については、tigris-python-sdk スキルを使用してください。
明示的なスナップショットの作成(任意のブックマーク)
すべての変更は自動的に追跡されますが、名前付きスナップショットを作成すると、特定の時点を簡単に見つけられます。
tigris snapshots take my-bucket --name "before-deploy-v2.3"
tigris snapshots list my-bucket
import { createBucketSnapshot } from "@tigrisdata/storage";
await createBucketSnapshot("my-bucket", { name: "before-deploy-v2.3" });
明示的なスナップショットを作成するタイミング: デプロイ、移行、大量のデータ操作、またはリスクのある操作の前。
作成する必要がない場合: 単一のファイルを復元する場合は、タイムスタンプを使用してください。自動追跡によって、通常の変更はすべてカバーされます。
重要なルール
必ず行うこと:
- バケットの作成時にスナップショットを有効にします。後から追加することはできません
- スナップショットが有効なバケットには STANDARD ストレージ階層を使用します
- まず本番環境以外のバケットで復元をテストします
- ナノ秒単位のタイムスタンプはどれもスナップショットのバージョンとして使用できることを覚えておきます
絶対にしないこと:
- 既存のバケットでスナップショットを有効にできると思い込まないでください(新しいバケットを作成する必要があります)
- 明示的なスナップショットだけに頼らないでください。自動追跡により、任意のタイムスタンプから復元できます
- スナップショットが有効なバケットでライフサイクルルールや TTL を使用しないでください(サポートされていません)
- 多数のファイルを復元する際にページネーションを忘れないでください
既知の問題
| 問題 | 対処方法 |
|---|---|
| 「Snapshots not enabled」エラー | バケットの作成時に --snapshot / enableSnapshot: true が指定されていません。新しいバケットを作成してデータをコピーしてください。 |
| 適切なタイムスタンプが見つからない | リスクのある操作の前に、参照しやすいように名前付きスナップショットを作成してください |
| 多数のファイルの復元に時間がかかる | 同時実行数を制限して復元をバッチ処理してください。バケット全体を復旧する場合は、代わりにフォークを検討してください |
| スナップショットバケットの階層を移行できない | スナップショットバケットでは STANDARD 階層を使用する必要があります。ライフサイクルによる階層移行はサポートされていません |
関連スキル
- tigris-snapshots-forking — 開発用サンドボックスやテスト向けのバケットのフォーク
- file-storage —
get、put、listの SDK リファレンス - tigris-backup-export — データベースダンプを使用する補完的なバックアップ戦略