Building your first web application on AWS is like shopping for a car at pepboys, part by part. While manuals to build one might be on aisle 5, the experience of having built one already is harder to buy.
Here are some interesting logistical questions, which I donâ€™t think get enough attention, when people discuss issues around building a new AWS based service.
- Picking the right Linux distribution: Switching OS distribution may not be too simple if your applications need custom scripts. Picking and sticking with a single distribution will save a lot of lost time.
- Automated server builds: There are many ways to skin this cat. Chef, Puppet, Cfengine are all good... Whats important is to pick one early in the game.
- Multi-Availability Zone support: Find out if multi availability zone support is important. This can impact over all architecture of the solution and tools used to implement the solution.
- Data consistency requirements: Similar to the Multi-AZ support question, its important to understand the data consistency tolerance of the application before one starts designing the application.
- Datastore: There are different kinds of datastores available as part of AWS itself (SimpleDB, S3 and RDS). If you are planning to keep your options open about moving out of AWS at some point, you should think about picking a datastore which you could move out with you with little effort. There are many NoSQL and RDBMS solutions to choose from.
- Backups: While some think its a waste of time to think about backups too early, I suspect those who donâ€™t will be spending way too much time later. The long term backup strategy is integral part of disaster recovery planning, without which you shouldnâ€™t think of going live.
- Integration with external data sources: If this application is part of a larger cluster of application which is running somewhere else, think about how data would be sent back and forth. There are lots of different options depending on how much data is involved (or how important protection of that data is)
- Monitoring/Alerting: Most standard out of the box monitoring tools canâ€™t handle dynamic infrastructure very well. There are, however, plugins available for many existing monitoring solutions which can handle the dynamic nature of infrastructure. You could also choose to use one of the 3rd party monitoring services if youâ€™d rather pay someone else to do it.
- Security: You should be shocked to see this on #9 on my list. If your service involves user data, or some other kind of intellectual property, build multi-tiered architecture to segment different parts of your application from targeted attacks. Security is also very important while picking the right caching and web server technologies.
- Development: Figure out how developers would use AWS. Would they share the same AWS account, share parts of the infrastructure, share datastore, etc. How would the developer resources be monitored so that unintentional uses of excessive resources could be flagged for alerting.
Are there other subtle issues which I should have listed here ? Let me know.