I am also working on this, and you learned a couple of things that are relevant here: your question about downloads in particular was on my mind:
(1) The best way to handle downloads, in my opinion, is to either switch to NFS / NAS, as you suggest, but better than using the Amazon S3 plugin for WordPress, so that any downloads are automatically copied to S3, and the URLs in the WordPress library reflect the fully qualified domain name of your bucket, not your specific site. Thus, you can have one or ten WP nodes in your Beanstalk, and the media / images are independent of any of these servers.
(2) You must absolutely use RDS here. Few things are easier to work without stress, like Multi-AZ, a reserved instance of MySQL RDS. Either this, or your own EC2 working with MySQL, which is independent of Beanstalk, but why run it when RDS is much easier?
(3) Yes, you must first make changes to your repository or local Git file (new plugins, theme changes, WP updates), and then download / install Beanstalk code as a revision. Otherwise, all changes made via the web interface to one node will never be in the new download for the new node - in fact, you will have an updated database, but an older set of code in the Beanstalk application, so it can create errors one or another type.
I took a course in AWS architecture, and their recommendations for EC2 and Beanstalk - to start thinking of server instances as very one-time - so you should try to think about how your mailboxes can support themselves during the boot process and take on work with each other without any precious resources on just one box. So losing a copy will never be a big problem. (This is definitely not the way we thought in the world of physical servers, where we all set up "just like that.")
Good luck
Neal magee
source share