Migrate from AWS S3 to Tigris | Tigris Object Storage Documentation

On this page

You can migrate from AWS S3 to Tigris with zero downtime using Tigris's shadow bucket feature. Tigris is S3-compatible, so most applications need only an endpoint and credential change.

Why migrate from AWS S3 to Tigris?

Migration approach

Tigris supports lazy migration using shadow buckets. Instead of copying all your data upfront, Tigris fetches objects from your S3 bucket on demand and caches them for future access. No downtime required.

You can also enable write-through mode, which syncs new writes back to your S3 bucket. This means your existing S3 bucket stays up to date throughout the migration, and you can take as long as you need before completing the cutover.

Prerequisites

Before starting, make sure you have:

Step 1: Create AWS access keys

  1. Open the AWS Management Console and go to the IAM service.
  2. In the sidebar, click Users, then select an existing user or click Add users to create a new one.
  3. Attach a policy that grants access to your S3 bucket. You can use AmazonS3ReadOnlyAccess for read-only migration, or create a custom policy scoped to your specific bucket. If you plan to use write-through mode, use AmazonS3FullAccess or a custom policy with write and delete permissions.
  4. Go to the user's Security credentials tab and click Create access key under the Access keys section.
  5. Select Third-party service as the use case, then copy the Access key ID and Secret access key. The secret won't be shown again.

Step 2: Configure the shadow bucket

  1. Go to the Tigris Dashboard
  2. Click Buckets in the left menu
  3. Select the bucket you want to migrate data into
  4. Click Settings
  5. Find Enable Data Migration and toggle it on
  6. Enter your AWS S3 connection details:
    • Endpoint: https://s3.<region>.amazonaws.com (replace <region> with your bucket's region, e.g. us-east-1)
    • Region: Your S3 bucket's region (e.g. us-east-1)
    • Access Key ID: Your AWS access key from Step 1
    • Secret Access Key: Your AWS secret key from Step 1
    • Bucket: The name of your S3 source bucket

The CLI flow is two commands: configure the shadow source, then optionally drain it.

1. Configure the shadow bucket with tigris buckets set-migration:

tigris buckets set-migration my-bucket \
  --bucket source-bucket \
  --endpoint https://s3.us-east-1.amazonaws.com \
  --region us-east-1 \
  --access-key AKIA... \
  --secret-key wJal...

Add --write-through for write-through mode, or --disable to clear the migration configuration.

2. Actively migrate (optional). Lazy migration only copies objects when they're requested. To migrate every remaining object server-side, run tigris buckets migrate:

tigris buckets migrate my-bucket

The command runs in the foreground and reports progress as it goes.

Step 3: Update your application

Point your application to Tigris by updating the endpoint and credentials in your S3 client configuration.

Using the AWS CLI:

aws s3 ls s3://your-bucket/ \
  --endpoint-url https://t3.storage.dev \
  --region auto

Or with boto3:

import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://t3.storage.dev",
    region_name="auto",
    aws_access_key_id="your-tigris-access-key",
    aws_secret_access_key="your-tigris-secret-key",
)

The only changes needed are the endpoint URL, region, and credentials. Your existing bucket names, object keys, and API calls stay the same.

Step 4: Verify the migration

Once your application points to Tigris, objects are migrated on first access. To verify:

  1. Request an object that exists in your S3 bucket
  2. Confirm it returns successfully through Tigris
  3. Check that subsequent requests are served directly from Tigris

Step 5: Enable write-through (optional)

To keep your S3 bucket in sync during the migration, enable write-through in the shadow bucket settings. With write-through enabled:

This keeps your S3 bucket current so you can fall back at any point.

Step 6: Complete the migration

Once your workloads are running well on Tigris, disable the shadow bucket configuration. Tigris becomes your primary object store.

FAQ

Does migration require downtime?

No. Shadow bucket migration happens transparently. Your application continues serving requests while objects are migrated on first access.

Do I need to change my application code?

Only the endpoint URL, region, and credentials. Tigris supports the S3 API, so your existing bucket names, object keys, and API calls work without changes.

Can I roll back to S3?

Yes. If you enable write-through mode, your S3 bucket stays in sync with all new writes. You can switch back to S3 at any point by reverting your endpoint configuration.

What happens to objects I haven't accessed yet?

They remain in your S3 bucket. Tigris only copies objects when they're first requested. Objects that are never accessed are never transferred.

How much does Tigris cost compared to S3?

Tigris charges $0.02/GB/month for standard storage with zero egress fees. See the Tigris pricing page for full details.