EBS Pricing
I/O requests are only charged for Magnetic EBS Volumes.
- Using SSD volumes (general purpose or provisioned) there is no change for I/O
- General Purpose volumes allow about 100 IOPs provisioned per disk (burstable depending on network traffic)
- Provisioned volumes allow you to increase performance above that ratio
Using non EBS optimized instances with provisioned IOPS is not a good idea.
Reference: http://aws.amazon.com/ebs/pricing/
Instance Pricing
Instances are not designed to be persistent like VPS or Dedicated servers are. Instead, they are designed to be pieces of a larger network infrastructure that makes up your application. There are certain ways around this such as having regular snapshots, and using an autoscaling group of 1 for instant failover.
Amazon's EC2 catch phrase: "Design for failure and nothing will fail"
Reference: http://media.amazonwebservices.com/AWS_Cloud_Best_Practices.pdf (page 11)
Reference: http://media.amazonwebservices.com/AWS_Building_Fault_Tolerant_Applications.pdf
Reserved Instances
I would not recommend reserving instances for more than a year at a time because reserved instances are highly specific. Instances must be all of the following criteria to receive the discount and are non-transferable.
- Must be the same instance type
- Must be in the same region
- Must be in the same zone
Reference: http://aws.amazon.com/ec2/purchasing-options/reserved-instances/
Bandwidth
There is not much that you can do here to reduce bandwidth costs (provided it is all legitimate), however you can increase the performance for your clients by using something like CloudFront or S3+CloudFront.
Using S3 for static media assets could also reduce the load on your server.
Designing your Architecture
Based on your requirements (in the comments of the question), I would recommend going with multiple EC2 instances (3-4) using auto-scaling to scale with demand. This will help reduce your costs outside of peak hours. To help reduce costs further, you can use reserved instances on your minimum instance count.
Using that model, a central database can be managed using RDS.
Here is a SE Q&A specific to Magento on AWS: https://magento.stackexchange.com/questions/459/running-magento-in-an-aws-environment