It took us a few days, but we've ported our system over to AWS. We're not clustered in the cloud yet, but that's next. We'll be conducting load tests next week. My first impression of AWS is posted here.
AWS is a great place for Tier 2/3 web app architectures. AWS has a long way to go to make my dreams come true for more complex systems.
There is no load balancing facility in AWS. You have to build one, and Amazon's elastic IP address product adds a layer you have to contend with. This means the "spinning up instances when load goes up" isn't *that* simple if you're spinning them up for the purpose of managing load.
Until their persistent storage (not to be confused with S3) product hits the light of day, you'll be playing with S3 like a distributed file system which brings with it the challenges of a distributed file system :-).
There's no support for it. You heard me right. This means getting your system's services to broadcast existence to each other requires manual management of IP addresses and lookup of said address *outside* EC2 entirely. You literally have to use dynamic DNS resolution services external to the system. _K_ _L_ _U_ _G_ _E_.
In the end... you should consider AWS to be nothing more than the traditional managed server hosting services (e.g. RackSpace) we've been using for years. There are two exceptions, and they both matter: one, the servers are totally virtualized and can be setup/torn-down programatically (that's a tasty proposition), two, lacking multi-cast support; painful.
I'm hopeful our system performs within our tolerance levels. I want this to work for convenience's sake.