К основному содержанию
скилл CX Codex

tigris-s3-migration — скилл для Claude Code: переезд с S3 на Tigris

Скилл ведёт миграцию объектного хранилища с AWS S3, GCS или Azure Blob на Tigris. Пригодится, когда нужно переключить бакет без остановки продакшена.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add tigrisdata/skills --skill tigris-s3-migration -a claude-code
Открыть на GitHub

Что делает tigris-s3-migration

Скилл описывает три стратегии переезда: shadow bucket, массовое копирование и инкрементальный синк. Основной путь — shadow bucket: Tigris читает объект из старого S3 при промахе кэша, отдаёт его и постепенно наполняет свой бакет. Данные заранее переносить не нужно.

Настройка идёт через Tigris CLI. Сначала tigris buckets create, потом tigris buckets set-migration с бакетом-источником, эндпоинтом, регионом и ключами AWS. Флаг --write-through дополнительно пишет новые объекты обратно в источник, чтобы остался путь отката. Дальше tigris buckets migrate вытягивает всё, что ещё не переехало, и по завершении tigris buckets set-migration --disable делает Tigris единственным источником.

Перед началом проверьте, что Tigris CLI установлен: tigris help || npm install -g @tigrisdata/cli. Для GCS и Azure в скилле есть готовые команды массового копирования через gsutil и az storage blob download-batch. Отдельные файлы в ./resources/ показывают замену эндпоинта в AWS SDK для Node.js, Go, Python, Ruby и PHP. Сломается всё там, где регион зашит как us-east-1 — для Tigris нужен auto.

Какие задачи решает

  • перевести продакшен-бакет с AWS S3 на Tigris без простоя
  • настроить shadow bucket и ленивую подкачку объектов
  • дотянуть оставшиеся объекты командой tigris buckets migrate
  • перенести данные из Google Cloud Storage или Azure Blob массовым копированием
  • поменять эндпоинт в AWS SDK и переменных окружения

Примеры запросов агенту

  • помоги мигрировать бакет my-app-uploads с S3 на Tigris через shadow bucket
  • настрой tigris buckets set-migration с --write-through для отката
  • прогони tigris buckets migrate my-app-uploads/images/ и покажи прогресс

Как установить tigris-s3-migration

1Через Skills CLI (Vercel)

npx skills add tigrisdata/skills --skill tigris-s3-migration -a claude-code

2Вручную: положить файлы

~/.claude/skills/tigris-s3-migration/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/tigris-s3-migration/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора5

Похожие

object-storage devops-skills Скилл для работы с объектным хранилищем: команды AWS CLI, бакет-политики, lifecycle-правила, версионирование и self-hosted MinIO. CX Codex +1 350установок neon-object-storage neondatabase Настраивает S3-совместимое хранилище Neon, которое ветвится вместе с базой данных. Пригодится для загрузок, изображений и документов приложения. CX Codex +1 28 200установок cloud-architect https://github.com/Jeffallan Скилл для проектирования облачных архитектур в AWS, Azure и GCP: схема с резервом, план миграции, расчёт стоимости и стратегия восстановления после сбоя. CX Codex +1 4 700установок migration-readiness aws-samples Разбирает код, зависимости и инфраструктуру проекта и говорит, что мешает перенести нагрузку в AWS. Пригодится перед миграцией, когда непонятно, с чего начать. CX Codex +1 540установок cloudflare-r2 devops-skills Помогает управлять хранилищем Cloudflare R2, настраивать бакеты через Wrangler, генерировать подписанные ссылки и связывать данные с Cloudflare Workers. CX Codex +1 335установок loki-config-generator akin-ozer Генерирует рабочие конфигурации Grafana Loki и Helm values под S3, GCS, Azure или локальный диск. Помогает развернуть кластер логов без ручного подбора параметров schema и ingester. CX Codex +1 580установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о tigris-s3-migration

Как установить tigris-s3-migration в Claude?

Выполните npx skills add tigrisdata/skills --skill tigris-s3-migration -a claude-code. Скилл появится в ~/.claude/skills/tigris-s3-migration/SKILL.md.

Что делает tigris-s3-migration?

Проводит миграцию объектного хранилища на Tigris: настраивает shadow bucket, дотягивает объекты, меняет эндпоинт в SDK и переменных окружения.

Что нужно для работы скилла?

Tigris CLI: если команда tigris help не отвечает, скилл предложит npm install -g @tigrisdata/cli. Для shadow bucket понадобятся ключи доступа к исходному бакету.

Исходный текст

SKILL.md · MIT
---
name: tigris-s3-migration
description: Use when migrating from AWS S3, Google Cloud Storage, or Azure Blob to Tigris — shadow buckets via `tigris buckets set-migration`, active drain via `tigris buckets migrate`, bulk copy, SDK endpoint swap, zero-downtime migration
---

# Migrate to Tigris from S3/GCS/Azure

Migrate your object storage to Tigris with zero downtime. Tigris is S3-compatible, so most apps need only an endpoint and credential swap. Shadow buckets enable transparent migration without moving data upfront.

## Prerequisites

**Before doing anything else**, install the Tigris CLI if it's not already available:

```bash
tigris help || npm install -g @tigrisdata/cli
```

If you need to install it, tell the user: "I'm installing the Tigris CLI (`@tigrisdata/cli`) so we can work with Tigris object storage."

## Migration Strategies

| Strategy             | Downtime | Best For                                                                |
| -------------------- | -------- | ----------------------------------------------------------------------- |
| **Shadow bucket**    | Zero     | Production apps — Tigris reads from S3 on miss, backfills automatically |
| **Bulk copy**        | Brief    | Small datasets, clean cutover                                           |
| **Incremental sync** | Zero     | Large datasets, gradual migration                                       |

---

## Shadow Bucket (Recommended)

Tigris reads from your existing S3 bucket on cache miss and gradually backfills data. No upfront data movement needed.

```bash
# Create a Tigris bucket
tigris buckets create my-app-uploads
# Point the Tigris bucket at the source S3 bucket
tigris buckets set-migration my-app-uploads \
  --bucket my-existing-s3-bucket \
  --endpoint https://s3.us-east-1.amazonaws.com \
  --region us-east-1 \
  --access-key AKIA_YOUR_AWS_KEY \
  --secret-key YOUR_AWS_SECRET
```

Add `--write-through` to also sync new writes back to the source bucket — useful when you want a safe rollback path during the migration window.

**How it works:**

1. Requests go to Tigris
2. If the object exists in Tigris, it's served directly
3. If not, Tigris fetches it from S3, serves it, and caches it

**Migrate everything up front (optional):**

Lazy migration only copies objects when they're requested. To actively migrate every remaining object server-side, run:

```bash
# Migrate every unmigrated object in the bucket
tigris buckets migrate my-app-uploads

# Or scope to a key prefix
tigris buckets migrate my-app-uploads/images/
```

The command runs in the foreground and reports progress as it goes, so you can fully drain the source before cutting over.

**After migration completes:**

```bash
# Disable migration (makes Tigris the sole source)
tigris buckets set-migration my-app-uploads --disable
```

---

## Bulk Copy

For smaller datasets or when you want a clean cutover:

### From Google Cloud Storage

```bash
gsutil -m cp -r gs://my-gcs-bucket /tmp/migration/
tigris cp /tmp/migration/ t3://my-app-uploads/ -r
```

### From Azure Blob Storage

```bash
az storage blob download-batch -d /tmp/migration/ -s my-container
tigris cp /tmp/migration/ t3://my-app-uploads/ -r
```

---

## SDK Code Changes

Read the resource file for your language to see before/after migration examples:

- **Node.js / TypeScript** — Read `./resources/sdk-nodejs.md` for AWS SDK → Tigris SDK migration
- **Go** — Read `./resources/sdk-go.md` for AWS SDK → Tigris SDK migration
- **Python** — Read `./resources/sdk-python.md` for boto3 → tigris-boto3-ext migration, or use the **tigris-python-sdk** skill for the post-migration developer experience (Django, snapshots, forks, Bundle API)
- **Ruby** — Read `./resources/sdk-ruby.md` for aws-sdk-s3 endpoint swap
- **PHP** — Read `./resources/sdk-php.md` for aws-sdk-php endpoint swap

---

## Environment Variable Changes

```bash
# Before (AWS)
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=us-east-1
S3_BUCKET=my-bucket

# After (Tigris)
AWS_ACCESS_KEY_ID=tid_xxx
AWS_SECRET_ACCESS_KEY=tsec_yyy
AWS_ENDPOINT_URL_S3=https://t3.storage.dev
AWS_REGION=auto
S3_BUCKET=my-bucket  # bucket name can stay the same
```

For frameworks with specific Tigris env vars:

```bash
TIGRIS_STORAGE_ACCESS_KEY_ID=tid_xxx
TIGRIS_STORAGE_SECRET_ACCESS_KEY=tsec_yyy
TIGRIS_STORAGE_ENDPOINT=https://t3.storage.dev
TIGRIS_STORAGE_BUCKET=my-bucket
```

---

## Verification Checklist

- [ ] Object count matches between source and Tigris
- [ ] Spot-check files: download a few and verify content/checksums
- [ ] Test presigned URL generation (endpoint must point to Tigris)
- [ ] Test CORS if using browser uploads (reconfigure on Tigris bucket)
- [ ] Test all upload/download code paths in staging
- [ ] Update CDN origin if using CloudFront/similar (point to Tigris)
- [ ] Update DNS if using custom domains

---

## Rollback Strategy

1. Keep source bucket read-only during migration (don't delete data)
2. Run both systems in parallel during verification
3. Only delete source data after confirming Tigris works fully
4. If using shadow bucket, removing the shadow source is the point of no return

---

## Common Mistakes

| Mistake                                 | Fix                                                                                |
| --------------------------------------- | ---------------------------------------------------------------------------------- |
| Forgot to update presigned URL endpoint | Presigned URLs must use Tigris endpoint, not S3                                    |
| CORS not configured on Tigris           | Re-create CORS rules: `tigris buckets cors set`                                    |
| Region hardcoded to `us-east-1`         | Use `auto` for Tigris                                                              |
| `path_style` not set                    | Add `force_path_style: true` (Ruby/Rails) or `use_path_style_endpoint: true` (PHP) |
| Custom domain DNS still points to S3    | Update CNAME to point to Tigris                                                    |

---

## Related Skills

- **file-storage** — CLI setup and SDK reference
- **tigris-security-access-control** — CORS and access key setup

## Official Documentation

- S3 Compatibility: https://www.tigrisdata.com/docs/sdks/s3/
- Shadow Buckets & migration: https://www.tigrisdata.com/docs/migration/
- CLI: `tigris buckets set-migration` — https://www.tigrisdata.com/docs/cli/buckets/set-migration
- CLI: `tigris buckets migrate` — https://www.tigrisdata.com/docs/cli/buckets/migrate

© tigrisdata · MIT · tigrisdata/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой