I use a custom AMI. I started with a base image a long time ago. Since then I have been upgrading and tweaking. There are several tutorials on creating the image. API tools are available for the whole process if you are on an instance-store image. It creates an image of the instance filesystem in /mnt and then breaks it into chunks to upload to s3 with a manifest and registers the manifest as a new private ami.