Disclaimer: I wrote this before being employed at Scaleway.

Wasabi has a very attractive pricing model at $0.0059 per GB/mo ($5.99 per TB/month) and no egress fees, which makes it by far the cheapest object storage provider on the market. And the performance is pretty good. But there is more to it.

Two reasons you should not use Wasabi

One little detail in the pricing model is that you’re billed at least 90 days for every object you upload. If the data inside a bucket is not updated very often, it’s not a big deal.

My two main usages for Wasabi have been backing up my server with restic and hosting the media files of my Mastodon instances.

For the first usage, I quickly realised that the Wasabi pricing model wasn’t viable for this usage. Restic segments its data into packs and chunks and rewrite them a lot when pruning backups. Even if 1% of chunk had been actually updated, I’d have to pay another 90 days for the new chunk. And with daily backups, it adds up pretty quickly. I am now using Hetzner’s Storage Box offer which basically offers a ZFS dataset over SSH. It has the advantage of being much faster and having snapshots. I’m billed for the space I actually use, which is less than 500 GB for 5.88€. 🙂

Now, for Mastodon I was pretty happy for quite some time, but the quality of the service has decreased a lot. Downtimes are getting more and more frequent, and at one point half of the fediverse’s favorite object storage provider was down for a week.

My bill has been pretty stable for a year at around 10$, which is more than the base price of 1 TB for 6$, because a lot of media files are actually temporary cache for the instance, and deleted after a while. So I had more than 1 TB when taking the active + deleted storage into account.

But lately, my bill has been exploding. For this month it is predicted to be around 20$, even though I have only 600 GB of active storage.

3.5 millions object for a total of 2.8 TB of non-existing storage vs 1.5 million / 0.6 TB of active storage.

3.5 millions object for a total of 2.8 TB of non-existing storage vs 1.5 million / 0.6 TB of active storage.

That’s because I have more than twice the number of objects and five times the used space of deleted storage. And deleted storage is not included in the first TB that you paid $5 for! It is very misleading.

Yes, that’s how the pricing works, but it’s difficult to accept. When taking that into account along with the repeated outages, I decided to move out.

The (real) cheapest provider: Scaleway

Scaleway recently updated their pricing: a free tier for the first 75 GB and then €0.01/GB. It’s pretty cheap with not hidden clause. According to this, my bill should go down to 6€ per month. And it’s a French company, not focused exclusively on getting funding from VCs. And I can host my bucket in Paris or Amsterdam.

Ok, let’s migrate!

Migrating an S3 bucket with rclone

I used rclone to migrate my bucket. rclone supports a bunch of storage providers including Wasabi and Scaleway. I recommend running it on some remote server for better performance (and because it will take some time…).

To keep things short, here is my .config/rclone/rclone.conf:

[wasabi]
type = s3
provider = Wasabi
access_key_id = xxxxxx
secret_access_key = xxxxxx
region = us-east-1
endpoint = s3.wasabisys.com
acl = public-read

[scaleway]
type = s3
provider = Scaleway
access_key_id = xxxxx
secret_access_key = xxxxx
region = fr-par
endpoint = s3.fr-par.scw.cloud
acl = public-read

public-read is very important. The objects have to be publicly readable, which is not rclone’s default behavior.

Grab an API key from both providers, make sure you use the correct regions, and you’re ready to go.

First, sync the whole bucket once or twice:

rclone sync wasabi:mybucket scaleway:mybucket

Then update your Mastodon instance’s /home/mastodon/live/.env.production:

S3_ENABLED=true
S3_BUCKET=mybucket
AWS_ACCESS_KEY_ID=xxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxx
S3_PROTOCOL=https
S3_HOSTNAME=media.instance.tld
S3_ENDPOINT="https://s3.fr-par.scw.cloud/"
S3_REGION="fr-par"

Restart the services.

Then, to make sure no files have been added to the Wasabi bucket in the meantime, do a copy (not a sync, which will delete new files on the Scaleway bucket)

rclone copy wasabi:mybucket scaleway:mybucket

I had a million and half object to migrate for about 600 GB. Each rclone operation took more than a day. To make things faster I recommend increasing the number parallel processes with --progress --transfers 50 --checkers 50.

So far so good

So far I didn’t have any issue with Scaleway, performance is good and I know what I can expect from my next bill. Moreover, their new web console is pretty nice.

Good job, Scaleway!