Migrate your buckets to OtterStorage with OtterMigration
OtterStorage Team · 7 min read ·
Switching object storage providers used to mean cobbling together scripts, babysitting copies for hours and praying nothing breaks halfway. With OtterMigration you do it from the console: connect your source bucket, pick the destination, and we copy the data in the background while you watch progress and live logs. Nothing to install, no downtime, and no risk of deleting anything at the destination.
What OtterMigration is
OtterMigration is OtterStorage's self-service assisted migration. It's built to bring your data in from another S3 provider —AWS S3, Wasabi, Backblaze B2, MinIO, Cloudflare R2, DigitalOcean Spaces— or from another Otter account, without leaving the browser. Each migration runs in an isolated, disposable container, on dedicated infrastructure separate from your storage, that reads from the source and writes to your destination bucket.
The underlying idea: since every provider speaks the same S3 protocol, migrating isn't about rewriting your application — it's about copying objects in an orderly way and switching the endpoint when you're ready. OtterMigration handles the tedious part and gives you full visibility into how it's going.
Self-service vs. doing it by hand
If you like full control, OtterStorage is 100% S3-compatible and you can migrate with rclone or AWS CLI from your own machine; we walk through it in how to migrate from AWS S3. But that means keeping a machine with good bandwidth running, managing credentials in files, and babysitting the process yourself.
OtterMigration takes that work off your hands: it runs on our infrastructure, not your laptop; you don't have to leave anything running; and tracking (progress, throughput, ETA and logs) lives in the console. It's the comfortable option for most migrations.
How it works, in four steps
1. Create the destination bucket
Buckets are created from the panel. Create the one that will receive the data and, if history matters, enable versioning before copying. If you need immutability, remember Object Lock can only be enabled when you create the bucket. Also choose the zone and disk technology that fit best.
2. Connect the source
In the migrations section, click "New migration" and enter the source details: type (AWS S3, S3-compatible or Otter), endpoint and region, bucket and, optionally, a prefix to migrate just one folder. Then the source access key and secret key. We recommend using a temporary, read-only key and revoking it when you're done.
3. Verify before launching
Click Verify. OtterMigration runs a pre-flight check: it confirms it can read from the source and write to the destination with those credentials. If something's wrong —bad credentials, unreachable endpoint, insufficient permissions— you'll know instantly, without spending a single byte of transfer.
4. Launch and watch
When the check passes, click Launch. The detail page shows a progress bar with percentage, objects and bytes transferred, throughput and ETA, plus the live log (if you close and reopen, it resumes without losing lines). You can pause, resume and stop the migration whenever you want. When you resume a paused migration you'll be asked for the source secret key again, because we don't keep it longer than necessary.
Additive copy: you never lose anything
OtterMigration copies, it doesn't destructively sync. That means two important things:
- It never deletes objects at the destination.
- If the migration is interrupted or you relaunch it, it skips the objects that already exist with a matching checksum and continues where it left off. Resuming is cheap and safe.
The transfer also verifies integrity by checksum, so every object arrives exactly as it was at the source. A half-finished bucket is always consistent: what's there is correct.
No downtime, controlled cutover
Your source stays operational throughout the migration: OtterMigration only reads from it. You can keep both sides live and switch your application to the OtterStorage endpoint once the copy has finished and you've verified it. To be thorough, run a final pass right before the cutover: since the copy is additive, that second pass only brings over what has changed.
Security: your credentials, handled with care
Because you provide credentials for an external service, OtterMigration is designed to minimize the blast radius:
- Source credentials are encrypted at rest, used once and purged when the migration finishes. They're never returned in any response and never appear in the log (the access key is shown masked; the secret key, never).
- The log goes through a scrubber: anything that looks like a credential is replaced with
***. - We validate the source endpoint to prevent it pointing at internal networks (anti-SSRF protection), and the migration node's network only allows egress to the internet and to our storage.
- Only account admins can create and launch migrations.
What about cost?
At OtterStorage we don't charge for data ingress: bringing your buckets in is free. Do note that your source provider may charge for egress (typical with AWS and other hyperscalers); that cost is billed by the source, not by us. So it's worth estimating the volume before migrating large amounts. Once on Otter, you pay for storage only, with no charge for requests or deletes; see the details on the pricing page and how it works in how we bill.
Frequently asked questions
Is my service interrupted during the migration? +
What happens if the migration is interrupted halfway? +
Are versions and Object Lock preserved? +
Which providers can I migrate from? +
Shall we bring your data to Otter?
Create your account, create the destination bucket and launch your first migration.
Become a Founding Otter