AWS Well-Architected Framework - Best Practices to design systems in Cloud
Tags: architecture, devops
Published: 2020-10-23 16:51:15

This post will talk about my key take-aways after reading and practicing AWS well-architected framework and five pillars that define how well the system architecture is? 


**AWS Well-Architected Framework**

It defines set-of guidelines and design principles to follow while building systems in the cloud. It is a must read guide on architectural best practices and trade-offs to consider, while designing and operating reliable, secure, efficient and cost-effective systems in cloud. 

AWS Well-architected framework is based on 5-pillars as listed below.

* Security
* Reliability
* Performance Efficiency
* Cost optimization
* Operational Excellence

![AWS Well-Architected Framework Pillars](https://dev-to-uploads.s3.amazonaws.com/i/5g0f1w0uik6v3x0aebio.JPG)

**Security**

Security is the most important aspect of cloud-native solutions. Prevent, Detect, Respond and Remediate security aspects to implement optimum security posture for Organization and as a thumb rule, Apply security at all layers.

Following are high level design principles for achieving security. 

* Prevent - Define IAM policy based on Principle of Least privilege (AWS IAM, SSO, MFA), Ensure Data Protection using encryption - In transit & At Rest (AWS KMS, CloudHSM, SSE)

* Detect - Logging and Monitoring of services (AWS CloudTrail, AWS CloudWatch, AWS GuardDuty)

* Respond - Automated incident response and recovery (AWS Config + Lamdba, AWS Systems manager & Automation Playbooks)

* Remediate - Leverage event-driven automation to remediate, where possible and secure cloud environment (AWS Security hub and Manual intervention)


**Reliability**

Achieving reliability can be challenging in traditional on-premises environments due to single points of failure, lack of automation, and lack of elasticity.

In Cloud, Architect and design solutions with mindset of "Everything fails all time". 

Following are high level design principles for achieving reliability.

* Automatically recover from failure - Monitor workload using KPIs, Trigger automated recovery process when threshold is breached. Aim to be able to Anticipate and Remediate failure before they occur.

* Test Recovery Procedures, Scale horizontally to avoid single point of failure (where suitable), detect failures and auto-heal itself

* Deploy using Immutable infrastructure


**Performance Efficiency**

Adopt data-driven approach to build high-performance architecture. Depending on use case, trade consistency, durability and space for latency to deliver higher performance. Cloud enables to embrace evolving architecture depending on data insights and usage patterns.

Following are high level design principles for achieving operational excellence.

* Experiment often
* Have performance metrics in place
* Focus on going global as you evolve
* Use serverless architectures


**Cost optimization**

Cost optimization is a continual process of refinement and improvement over the span of a cloud resource. On top of having cloud budget, resource tagging and forecasts,

Following are high level design principles for achieving cost optimization.

* Create cost-aware processes and culture
* Purchase reserved instances and go with upfront payment where utilization is predictable
* Delete unattached EBS volumes & obsolete snapshots, release unwanted elastic IPs and choose appropriate storage tiers


**Operational Excellence**

The operational excellence pillar includes how organization supports business objectives by running software systems efficiently and by gaining insight into operations, and then by continuously improving to deliver business value.

Following are high level design principles for achieving operational excellence. 

* Perform operations as code
* Make frequent, small, reversible changes
* Refine operations procedures frequently
* Anticipate failure
* Learn from all operational failures


**AWS Well-Architected Tool**

The AWS Well-Architected Tool helps to review the state of application and compares them to the latest AWS architectural best practices. The tool is based on the AWS Well Architecture Framework developed to help cloud architects build secure, high performant, resilient, and efficient application infrastructure. 

![AWS Well-Architected Tool](https://dev-to-uploads.s3.amazonaws.com/i/cp7v4xp7e3ioftucpbxi.JPG)

This Framework provides a consistent approach for customers to evaluate architectures and provides guidance to help implement designs that scale with application needs over time.


**Benefits of AWS Well-Architected Tool** 

* Get Free architectural guidance
Gives access to best practices used by AWS Architects whenever you need it. Just answer series of question on your application and tool delivers step-by-step guidance on how to improve current design and architecture.

* Review your application consistently
Offers single tool and consistent process to review cloud architectures across organizations. Provides potential next steps for improvement, drive architectural decision and brings architectural considerations into corporate governance. 

* Identify and Implement improvements
Use this tool to support continuous improvements throughout lifecycle of application. Makes easy to save point in time snapshot and track changes. If you want to start all over again, just launch one more review process to ensure your architecture continues to improve over time

[Well-architected Labs](https://wellarchitectedlabs.com/) provides nice hands-on labs to try out these architectural best practices.

Enjoy architecting systems in cloud and build efficient systems.

Please like, share and comment your views/ opinion.

Disclaimer - This post is my personal opinion and does not reflect those of any of my past, present or future employers or affiliations.