How Not to Save Money on Cloud Storage
How not to save money
ℹ️ Warning: lots of boring 'technical' words ahead.
A few years ago on the Fullyst website I created a Telegram sticker collection with search. The collection attracts around 2,000 visitors a day. It is also a lot of static files.
I could not request stickers from the Telegram API for each visitor because I would hit the requests-per-second limits. What to do? Store them on S3, GCP Storage or some other static storage.
But:
1. It is about 300 GB of files.
2. More than 500,000 stickers are requested every week (when people browse the sticker catalog, they see stickers).
3. That is about 60 GB of outgoing traffic per week (and if you have worked with S3 or GCP Storage you know that traffic is very expensive).
At some point I chose Google Cloud Platform Storage, but for the last two months I have been suffering from high bills and finally decided to switch to something 'alternative'. Fortunately, a lot of new providers have appeared in recent months.
I went with Cloudflare R2. Cloudflare is a very popular DDoS protection service, DNS server, domain registrar and a bunch of other great tools, some of which I already use for Fullyst.
The first week went pretty well:
1. It is much cheaper than S3 and GCP Storage.
2. It is S3 API compatible.
But then... I noticed that sticker thumbnails (~64 KB) were loading in 2–3 seconds. How is that even possible? Unfortunately, for Cloudflare R2 this is considered 'normal', but for me it is completely unacceptable.
Then I remembered the new S3-compatible storage from Hetzner (a very popular data center where I have been renting three servers and two virtual servers for 10.5 (!) years).
The problem is that Hetzner Storage is in beta. How do you get into the beta? Turned out to be simple: I described my use case in detail (including number of objects, storage volume and monthly requests), and a few hours later I got beta access. I guess Hetzner is interested in feedback from customers with numbers like that.
Right now 10% of the stickers have already been migrated to Hetzner, and the story could end there. But I decided to write about money.
I need to save money, right? So I need to delete the migrated stickers from GCP Storage, right? But to delete the stickers I have to use the API and first list the objects in each directory (>250,000 directories). Then I need to send a delete request. And guess what? Those requests cost money. In my case, to delete all the stickers I would have to send more than 60,000,000 requests, and each million costs $0.50. So I will have to pay $30 just to delete stickers. I will save money in the future, but for now I still have to pay (although that is still better than paying taxes).
More to explore
How Watching Exchange Rates Replaces Reading the News
Another useful side of tracking exchange rates in real time is that I learn about world events without reading the news. I do not have time to read the media ri…
Fullyst 2025 in Numbers: Growth, Usage, and the Weirdest Spam
All right, I’ll still write a bit about the 2025 results, but for now only about Fullyst. Some stats: 1. Subscriber growth for the Fullyst news channel: +716 pe…
Saylify: web app progress, search experiments, and current pain points
Saylify progress update: I have started on the web app and so far it is going quite well. There is summary, translation, summary of the translation and similar …
Turning My Life Upside Down at the End of a Crazy Year
It seems like it is time to write year-end summaries and plans for the next one, but it looks like I am not up for that. As this insane 2025 is wrapping up, I d…