There are some advantages and disadvantages to EBS and instance store. In general, I recommend instance store over EBS for most scalable applications.
Some advantages of EBS:
- Ability to stop/start instances
- Root volume size larger than 10 GB
- Ease of creating AMIs
- Ability to snapshot root volume
Some advantages of instance store:
- Not dependent on EBS service, which has had some high profile outages over the past few years
- No cost for root volume when instance is running
- One less moving part to worry about
There are definitely more advantages and disadvantages than I have listed, but those are the ones that come to mind quickly. At work, we use instance store for all instances unless there's a very specific reason for having an EBS instance. All EBS instances are duplicated in every available availability zone within a region to help ensure some instances continue running in the event of another EBS outage.
I like to draw the line at customization: if an instance needs a lot of custom work to function, then use EBS, but if not, use instance store. I define custom work as tasks that need to be done by hand and are not automated. We use Puppet to deploy instances from scratch using the stock Ubuntu AMIs. I wrote a blog post about how we are able to take generic AMIs and place them in service without user intervention.
If you're going to use AutoScaling or similar technology, I highly recommend investing in automation, even if you will roll your own AMI, as there will likely be changes you'll need between AMI builds (code deployments, etc).
Regarding building instance store AMIs, there are a large number of tutorials available online showing how to build instance store AMIs, as instance store has been around a few years longer than EBS. The AMI tools are available at http://aws.amazon.com/developertools/368 .