Can you tell me the reason you'd want to run a load balancer in front of a single instance? I read the feature spec for the elastic load balancer and can't it out.
There's 2 main reasons. 1, if the AZ that your single instance is running in dies completely, ELB can help fire up a new instance in another zone quickly without having to handle re-routing DNS, etc. 2 if you need extra capacity in a hurry (e.g. you just got linked from HN and 10,000 people sign up), you can add more instances without re-achitecting.
Whether it's worth paying for those capabilities is always up to you though.. :)
This is a great point. Although it's a slight extra cost, we have adopted this a best practice because it's still cheaper than a more responsive DNS service.
If you have one single instance only, I'm not sure there is any point. But if you want your app to auto-scale upwards to add EC2 instances if the load increases, then the load balancer is necessary. It enables all your EC2 instances to be accessible via one public URL (as the elastic load balancer forwards requests on).
I set it up such that we always have at least 2 EC2 instances, in separate availability zones, so that, if one goes down, at least the other is likely to keep working. And then it auto-scales upwards from there, if the load gets high enough.
The load balancer is pretty much transparent as far as you the developer is concerned. You don't need to configure it - beanstalk does that - and it scales completely transparently (unlike the EC2 instances, for which you do need to define auto-scaling rules if you want that).
I may be missing some subtleties as I'm far from being an AWS expert... Just been picking bits up here and there through using beanstalk and a few of the other APIs for extra bits and bobs.