Implementation and Deployment
In this course we apply the design principles, components, and services we learned in the previous courses in this learning path to design and build a highly available, scalable application. We then apply our optimisation principles to identify ways to increase durability and cost efficiency to ensure the best possible solution for the end customer.
- Identify the appropriate techniques and methods using AWS services to implement a highly available, cost efficient, fault tolerant cloud solution.
This course is for anyone preparing for the Solutions Architect–Associate for AWS certification exam. We assume you have some existing knowledge and familiarity with AWS, and are specifically looking to get ready to take the certification exam.
Basic knowledge of core AWS functionality. If you haven't already completed it, we recommend our Fundamentals of AWS Learning Path. We also assume you have completed all the other courses, labs, and quizzes that proceed this course in the Solutions Architect–Associate on AWS learning path.
This Course Includes:
- 4 Video Lectures
- Real-world application of concepts covered in the exam
What You'll Learn
|Lecture Group||What you'll learn|
|Solution Design||How to apply what you've learned about designing solutions to a real-world scenario|
|Solution Architecture||Architecting a solution in the real world|
|Implementation||Implementing on a solution you've designed and architected for the real world|
|Optimizing for High Availability||Optimizing your real-world solution for high availability|
If you have thoughts or suggestions for this course, please contact Cloud Academy at email@example.com.
About the Author
Andrew is an AWS certified professional who is passionate about helping others learn how to use and gain benefit from AWS technologies. Andrew has worked for AWS and for AWS technology partners Ooyala and Adobe. His favorite Amazon leadership principle is "Customer Obsession" as everything AWS starts with the customer. Passions around work are cycling and surfing, and having a laugh about the lessons learnt trying to launch two daughters and a few start ups.
Now let's launch a highly available, fault tolerant, cost-efficient application infrastructure. So let's start with our design. Our customer, ACME Widgets, is a successful widget maker with a growing global customer base. The widget support page they offer has very high traffic when they release new widgets. Our brief, is to launch a highly available support application. Which will ensure a reliable, always-on customer experience for ACME Widgets and customers. The customer has used a local data center for their first two years of operation. Which, unfortunately, did not scale well when they launched a successful widget. People tried to view the support page for a widget in the first hour of a widget release and the web server hosted in the data center did not scale to meet that burst activity requirement. As the web servers in question did not recover quickly, the client lost a number of customers. ACME Widgets wants a better solution. And we need to ensure what we propose will deliver a scalable, highly available, fault tolerant environment for the lowest possible cost. We look for opportunities to use our "Top 10," highly available services that we've been discussing, as a way to help us check point every opportunity to improve availability, scalability and fault tolerance. And of course, we'll be looking for options that deliver on our requirements in the most cost-efficient way. Let's take it step by step, so we time to discuss some of the design principles relevant to the Solution Architect Associate Exam. So first off, it's a key priority that this system is always available. So we need to consider deploying into multiple availability zones. Having reviewed the current and projected user stats, we've determined that if we use CloudFront as a CDN, launching services in one region, should meet requirements. It's easy to deploy in other regions if we need to, so that can our first cost-optimization design decision. We'll deploy DNS services in Route53 using Failover, so services can continue running in one AZ if the other AZ suffers some kind of incident or outage. To achieve our high availability, we'll launch multiple instances in our application layer. Our application instances we'll put behind an elastic load balancer to ensure effective and evenly distributed use of all our instances. And to add that additional layer of security as we'll terminate SSL connections at the elastic load balancer. So we're going to need a resilient database layer as well. To ensure high availability in our database layer, we'll run an RDS database instance. We'll deploy CloudWatch alarms using SNS alerts to notify us when there's a change to our order-scaling group size. And database metrics to notify us if our database's performance exceeds our performance criteria. Keep in mind CloudWatch notifies us of changes in state and the alarm states are, that's right: OK, ALARM, and INSUFFICIENT DATA. Okay, so that's our proposed high level straw man design. Is there anything else we could add to improve our availability and security before we stand this up and test out our hypothesis? Let's think through our list of the "Top 10" high availability services that AWS provides to help us design highly available, cost-efficient, fault tolerant solutions: Regions, AZ's, VPC, ELB, SQS, EC two, EIP's, Route53, CloudWatch, and Autoscaling. So we've got nine out of our 10 already. And we can look for opportunities to decouple our layers using SQS in our next optimization stage. Another improvement will be CloudFront. As a distributed content delivery network, CloudFront will add another layer of resilience to our design. It's reasonably cheap to deploy and as a distributed network, it adds another layer of redundancy, and security, while ensuring we have the fastest possible response times for our end users. Plus, we have the option to provide paid-for content using CloudFront security to deliver private content to known users. Okay so let's build a straw man so we can test out our hypothesis. One of the great benefits of AWS, is that we can literally stand up the environment to test out that our design is meeting the requirements that we have. So let's get started on that.