We decided to leave AWS

February 17, 2020 · written by Author Image Son Nguyen Kim

I’ve always been using AWS for hosting from simple prototypes to critical B2B systems. Here’s why I decided to leave AWS


Thanks to AWS incredible catalog of products, almost all needs are covered. AWS is therefore chosen for SimpleLogin.

So naturally, the first version of SimpleLogin is hosted on AWS. And as we are based in Paris, the Paris data center is picked for the proximity.

AWS and emails

For past adventures, I mostly use third-party email delivery services like Postmark, SendGrid, SES, etc. Unfortunately, their pricing models are based on the number of emails, which are not compatible with the unlimited forwards/sends that SimpleLogin offers. Also, we want SimpleLogin to be easily self-hosted and its components fit on a single server. For these reasons, we decide to run our MTA (Mail Transfer Agent) on EC2 directly.

I naively believed that would work as AWS is after all a VPS hosting service and everything can be run on EC2. As it turns out, we ended up spending way too much time and effort to have our EC2 instances handle email delivery correctly:

By our experience, AWS doesn’t have in place a good enough mechanism to stop spammers from using their Elastic IPs, leading to their bad network reputation.

It’s time to move

Because of the earlier difficulties, we took a step back and analyzed our architecture to see if it’s really dependent on AWS:

So we decided it’s maybe better to make SimpleLogin cloud-agnostic and we’ll just manage the cloud servers ourselves. That opens several advantages:

Next destination

We studied some popular options like DigitalOcean, OVH (OVH is very popular in France), Linode, etc and decided to give UpCloud a serious try due to several reasons:

We started by moving our staging environment from AWS to UpCloud. The hardest part was to replace RDS. We decided to take on managing our database ourselves using Docker along with some monitoring and backup scripts. Other components were easy to move as they were already based on Docker.

After extensively testing the staging environment we took the plunge to migrate the rest of our cloud environment. Our entire infrastructure is now running on UpCloud. Despite our cautious expectations that the migration would be a rough journey, in the end, the move was smooth and downtime less than 10 minutes. After deploying all components on UpCloud, the longest step was just waiting for the DNS changes to propagate.

Now our service has run on UpCloud for some time and our users report having much better success with email delivery. Time will tell, but so far we are pretty happy with UpCloud. If you want to try out UpCloud, you can use this link and we’ll both have $50 credit.

Our next step is to deploy SimpleLogin on another cloud provider for redundancy. Any recommendation is welcome!

The first version of this article is posted on UpCloud blog