I have been working with quite a few cloud infrastructure providers (IaaS) over the years. At the beginning of times, AWS was the only option. Now the landscape has changed and you have quite a few additional players (albeit AWS continues to rule the kingdom).
I will try to put here, based on my experience, the most important criteria that you need to consider when choosing your cloud provider.
You really need to understand the price structure of the cloud provider you have chosen to avoid nasty surprises.
You have AWS model, in which you are charged for nearly everything (and that has given birth to a number of startups just helping you make sense of it) or then you have the simple and straightforward model of Digital Ocean in which you pay a fixed monthly fee for a certain amount of resources (including bandwidth).
In any case, you need to carefully consider your budget and do your homework simulating the resources that you will need and trying to figure out the monthly costs. This will help in narrowing the cloud providers you can work with.
This is another important point to consider. Where are your customers located?. Latency is an important factor when dealing with customer satisfaction, so you need to chose a cloud provider that has a data center close to where you customers are to ensure minimal latency.
Another factor that advises to carefully check location is compliance. Do you need to ensure that your data stays within the EU borders to comply with some regulations?. In this case again, you will need to study the offering of your cloud provider and ensure that no data is sent overseas when using any of the services of your chosen cloud (this is easier said than done given the fuzziness of the cloud ecosystem).
This really depends on the level of automation that you want to achieve for your infrastructure.
If you company embraces the DevOps concept and treats or wants to treat all infrastructure as code, then definitely choosing a cloud provider with a strong API (like Amazon) that allows you to control every aspect of the cloud will be of critical importance.
If, on the contrary, you deploy and manage your servers mostly from a dashboard and need not much else, then a simpler cloud offering that meets some of your other requirements will be a perfect fit.
Does your site have large fluctuations in traffic (i.e. it is seasonal, or rely heavily on promotions, or it is a news site ...)?. If so, then you must consider a cloud provider that support auto-scaling deployments.
Generally, a cloud provider supporting auto-scaling will need to have the following in place:
- Some kind of load balancing system.
- Some type of monitoring system that constantly analyzes incoming traffic to your site.
- And finally a built-in system, that allows you to define thresholds based on the collected metrics on which to launch or remove additional servers.
The implementation can vary (in AWS these are named ELB, Cloudwatch and auto-scaling policies), but in one way or another you chosen cloud provider needs to cover the three roles described above.
Are you deploying a single-tier system (i.e. all roles in the same server) or a multi-tier system (i.e. separate roles for web and database)?.
If you have a multi-tier setup, most probably the simpler cloud providers will not work for you. I would advice choosing a cloud provider that has some feature that allows you to isolate your servers from the rest of the network. This is necessary as there will be communication between the different servers in your multi-tier configuration (i.e. between your web and database servers) and you want this traffic to remain secure and private. The better way to achieve this is isolating it, at network level, from the rest of the servers in the cloud provider.
There are several options here, but all simulate a private LAN for your servers.
Amazon offers VPC (Virtual Private Cloud) to solve this. Other providers like Elastichosts offer the VLAN concept. In any case you need to look for something like this to guarantee the privacy of your data.