If you're talking directly to AWS then you have a few options, but essentially you'd do the following to scale your apps:
Scaling App Servers on EC2
You'd use a combination of CloudWatch and the EC2 services to look at perf metrics, and based on that spin up and spin down EC2 app instances as you'd see fit.
Scaling SQL and NoSQL dbs
This is a bit different depending on the DB, but AWS abstracts a lot from you, so if you're using their services there are ways to scale horizontally programatically with DBs.
AppHarbor Questions
Appharbor introduces the notion of workers. Are workers like multiple instances, and do they get automatically load balanced?
Can I add/remove workers programatically? If so, based on what metrics?
If you're using an add-on, say MongoLab for simplicity sake, do you have to manage your sharding manually by have multiple MongoLab dbs, or do add-on providers provide that abstraction for you?
Essentially, what is the Horizontal Scaling story for AppHarbor?