We moved our whole stack from manually managed Linode instances to AWS Opsworks, Elasticache, RDS, etc. We are currently somewhat tied now to the AWS stack, though through a large collection of our own Chef scripts I imagine we could move to a manually setup chef setup ourselves.
Largely we've been very pleased with AWS, but the black box nature of a number of products (particularly Elasticache and RDS), has caused us some minor grief. Also, the higher frequency of single instance failures (which our stack can handle pretty gracefully) is somewhat annoying.
EDIT: We were also able to fairly significantly lower our bill with reserved instances while also significantly increasing our ability to handle peak capacity with AWS.
I would think Elasticache and RDS would be the least of your worries since they're just fully managed versions of readily available software. You can always host your own Redis and SQL database. Something like DynamoDB would be way more complicated.
Really the issue with Elasticache and RDS is that when they go down and fail over to new hardware, we have no idea what happened to cause an (admittedly brief) outage.
Basically, we just open a support ticket and say "what happened", and they just say "oh, the machine failed and was rebooted"
Largely we've been very pleased with AWS, but the black box nature of a number of products (particularly Elasticache and RDS), has caused us some minor grief. Also, the higher frequency of single instance failures (which our stack can handle pretty gracefully) is somewhat annoying.
EDIT: We were also able to fairly significantly lower our bill with reserved instances while also significantly increasing our ability to handle peak capacity with AWS.