Cost and Trade-offs of EC2 vs Hosted VPS for a LAMP site with 1M uniques
I can provide a perspective on EC2 (compared to dedicated - never gone the VPS approach) - in no way comprehensive, and all from personal experience, but it might provide a starting point.
EC2 Costs:
- Instance costs (RAM, Processing power (in 'ECUs'), ephemeral (temporary) storage for most instances) - on a per hour (or part thereof) basis
- Options: On-demand instances, Reserved instances, Spot instances
- Storage costs: Elastic Block storage - per GiB + cost for I/O - can create EBS volumes upto one TiB, can join multiple volumes to a single instance, can create RAID disks from multiple volumes - storage persists across instance terminations
- Data transfer cost - incoming data is free, outgoing data is charged on a tiered basis; data transferred between instances in the same availability zone (not same region) is free.
- Backup costs: EBS volumes can be quickly backed up using snapshots, which are differential (yet independent), compressed images - charges for snapshot storage (per GiB) and for get/put requests)
- Static IP (elastic IP): one per instance free as long as attached to an instance - there is a charge (per hour, or part thereof) for unattached elastic IPs)
You are charged for every little thing, and while no individual cost seems high, the costs definitely add up over time - you need to manage your costs well, as AWS does not provide in-built mechanisms for limiting costs (e.g. you can't specify a cap of 100GB bandwidth per month - whatever you end up using you pay for)
Advantages:
- The primary advantage is in terms of on-demand scalability - if you need additional processing power right now, you can get it. The EC2 services also are easily integrated with other AWS services (e.g. Cloudfront CDN, or Cloudwatch monitoring, etc.)
- You have full root access, can fully customize your instances (including customizing your own operating systems, if needed)
- Flexibility - there are a wide variety of instance types favouring different tasks, but certain (rare) situations may run into memory limits
- Easy to change instance types - you may start with a small instance and upgrade it to a large instance on-demand.
- Same 'image' (AMI) can be easily deployed on multiple instances 'on-demand'
- Basic monitoring (Cloudwatch) - in 5 minute intervals - is free
- Thorough breakdown of costs available with hourly resolution
- Good control over security (e.g. multiple restricted accounts, etc)
- API access to virtually all facets of the 'system'
- Most things have an interface or control system that you can use - you don't need to contact a 'human' to make changes (e.g. add storage, instances, change the operating system, etc.) - it is therefore easy to test and 'play' with.
Disadvantages:
- EBS - the I/O and performance is both variable and dependent on instance type (since larger instances offer greater network throughput)
- Bandwidth - at low usage levels can be quite costly; you can't 'reserve' a quantity (although, if you commit to a (significant) minimum quantity they may offer you a discount); for true high availability, you need instances in multiple regions - which then incur a cost for transfer between instances.
- No stateful external firewall (Security groups provide an external firewall, but it is only per port/ip/security group)
- EBS volumes can only be attached to a single instance at any given time
- AWS is not always the most communicative about issues
- There can be issues terminating an instance or detaching an EBS volume (rare)
- Multicast/broadcast transmissions (e.g. used by some transport systems) not supported (only unicast)
- Some aspects of documentation are lacking (e.g. with regard to definitions on usage reports)
I am sure there are more points, but those come to mind at the moment.
Personal Opinion:
I prefer AWS, for my needs it offers good cost, flexibility, and control. I think that AWS would be best suited for either very small sites or larger sites that need the on-demand scalability. You can implement pretty much anything on EC2 that you could with a VPS, but you may pay more for it. Mid-sized sites that can find a suitable VPS package are likely to incur higher costs on AWS than on the equivalent VPS.