A lot to be fair, but the first steps are hiring an expert and not assuming you know how to design on AWS properly even if you are an expert in Infrastructure or Applications. Several organisations have tried AWS D.I.Y. before coming to see an AWS expert, often with the results being disastrous and the learning curve being painful.
Yes you can spin up your own server in AWS, you can click on another service such as RDS (Managed Databases) and start running a database. And you can setup your own S3 bucket. And you can probably attend a single AWS training day or a lunch and learn event and think “Yes, now I’m comfortable running and managing my own AWS environment.”
However AWS and any huge technology has never been easy to learn, whether it’s becoming a database expert, application specialist, developer, sys admin or automation/ dev ops master. Usually the road to learning any new technology is a road marked with pain and lot’s of mistakes.
I’ve been using AWS and developing with it since 2008, but I still don’t consider myself top of the game. There is always so much to learn every day whether it learning a new AWS product or refining my skills on my most commonly used tools of choice: S3, EC2, RDS, VPC, Lambda, API Gateway,SQS or DynamoDB. I have to balance that with the rest of my life like looking after a family and other activities.
So putting that aside, if you are wanting to design a solution on AWS it takes a good solid understanding of all the services available within AWS.
Don’t just lift and shift
Don’t assume the best way to migrate an existing application is to just simply lift and shift it to AWS EC2. Investigate if it can be refactored for serverless AWS services such as Lambda or being able to use SQS for message queues. You will get both performance and cost benefits out of both if you are considering refactoring an existing application.
If you’re looking at developing a new application or website or mobile app on AWS then take a step back, don’t think servers, think what services are available to me to make this process easier? For example for a website you might choose to host your entire front end on S3 storage without the need for EC2 instances. You may also decide to use AWS Cognito to manage your mobile experience for end users.
Decouple where possible
If you are constrained by a 3rd party piece of software that needs to be installed on a server environment explore how it can be “decoupled”. Look at using Elastic Load Balancers, RDS (Relational Database Service), Autoscaling and Elasticache — all services designed to give you increased availability, performance and remove single points of failure.
Another consideration is to look at how you deploy applications into AWS. So not just a simple architecture that outlines your Desired State, but also a Deployment Architecture outlining How you are going to get there and maintain that state as well as improve it in the future. AWS has a number of tools available for this including CloudFormation, Elastic Beanstalk, Code Deploy and you can use 3rd party tools to help streamline your deployments.
Where possible try and lean on people who have the experience, ask for case studies that demonstrate their experience and problems they solved. Get involved in your local AWS community and go get training, both online and offline. And if you’re game enough and have the budget upskill your existing teams to become more devops oriented and less focused on traditional approaches to software delivery.
So what does it take to architect on AWS? A lot as you can imagine, but you can have fun and always question the why… and most importantly connect with other AWS people and the right skill sets.
Ben Fellows is Head of Engineering @ Teem. He leads the development of solutions for cloud automation that reduce the time it takes to provision applications on cloud infrastructure and reduce complexity with cloud automation.