Love the sustainability of AWS Well Architected Reviews
Tags: aws, devops, cloud, finops
Published: 2022-05-13 07:55:17

Written by Manuel Vogel.

This blog post is part of a series about the [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected "AWS Well-Architected Framework"), what it is, why it makes sense to do it, and how we at kreuzwerker do it. In this blog post, we will focus on the Sustainability pillar, which could also be called the *Green Pillar - optimize beyond costs*.

## What it is

The Well-Architected Review is NOT AN AUDIT, but a way of working together on how to improve your architecture by using best practices. It describes key concepts, design principles, and architectural best practices for designing and running workloads in the AWS cloud. The process leads you through several foundational questions and checks. It has been derived from years of experience gained from working with the AWS cloud regarding security, cost efficiency, and performance. Hence, it gives good advice on improvements. It helps cloud architects build secure, high-performing, resilient, and efficient infrastructure for various applications and workloads.

__It is built around six pillars__

1. operational excellence 👨🏽‍💻
2. security 🔒
3. reliability 💪🏾
4. performance efficiency 🚀
5. cost optimization 💵
6. sustainability 🌳

and the AWS Well-Architected provides a consistent approach for customers and partners to evaluate architectures and implement scalable designs.

The hard facts about AWS Well-Architected reviews in 2022 are:

- it consists of 58 questions in total across all pillars
- it takes around 4-6 hours for one workload (without tool support)
- the goal is to remediate 45% of the high-risk findings with a minimum of 20 questions answered.

We also described the process from our perspective in more detail [here](https://kreuzwerker.de/en/solution/well-architected-framework "kreuzwerker Solutions"). 

## How we do it at kreuzwerker

__Why should you do it with us?__

As a [Well-Architected partner](https://partners.amazonaws.com/search/partners?facets=Program%20%3A%20AWS%20Well-Architected%20Partner%20Program&pName=kreuzwerker%20GmbH "Well-Architected partner"), we do at least 20 well-architected reviews per year and have built overall deep architectural expertise for every pillar and [hands-on](https://www.wellarchitectedlabs.com/ "Well-Architected") experience.

__How do we perform such a review?__

For us, it's an interactive process: we inspect and adapt every time we do it by requesting feedback from our clients and doing a short internal retrospective. As of now, we perform it as follows:

- We do it in 2 blocks from 9-12 pm and 1-3 pm with a lunch break. However, we can continually adapt if we are faster, e.g., we shift the gap, and we are also flexible whether doing it remotely or at your office.
- We do it in an interactive, story-telling mode. This means: you talk, we listen, and then dig deeper into specific areas while being able to cover multiple questions.
- Our process is supported by tools (more in the other part of the blog post series 🥳)

We do not just handle the questioning but give guidance to answering them. We can tell you how and why there could be improvements to be made.  Alright, enough for the introduction. Let's jump right into it.

## Sustainability Pillar

Sustainability is now on the mind of many enterprises. The announcement of this pillar at re'invent 2021 showed that AWS wants to prioritize a sustainable ecosystem. Lately, more and more companies have signed up for the __Climate Pledge__, promising to achieve net-zero carbon by 2040. However, many companies need support in how they will accomplish this; AWS’s Sustainability Pillar and we, as partners, will help companies achieve this goal.

The pillar was the 6th one announced, meaning it is now also seen as one of the top 6 fundamental principles and should be considered when designing and working with AWS environments. It offers practical advice on how to better architect your code, infrastructure, and practices to deliver sustainable workloads on AWS. As shown in the following graphic, the responsibilities are shared:

- AWS is responsible for the sustainability of the cloud, such as data centers, cooling, water, building materials, etc.
- You are responsible for the sustainability in the cloud, such as data design & usage & storage, utilization & scaling, code efficiency, etc.

[![sustainability-in-the-cloud](//images.ctfassets.net/hqu2g0tau160/21736bGB8wUtXQLcGoGVyZ/17c5eb0c0de57f4ed56c216f1f86590b/sustainability-in-the-cloud.jpeg)](https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/the-shared-responsibility-model.html "AWS")

*Diagram showing the AWS shared responsibility model.*      

However, what does this mean in detail?

## In a nutshell

If you're too overwhelmed to read the full [whitepaper](https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/sustainability-pillar.html "whitepaper") from AWS, [Roman Sevko](https://www.linkedin.com/pulse/aws-sustainability-pillar-roman-sevko/ "linkedin Roman Sevko") and [Mark Faiers](https://medium.com/contino-engineering/the-aws-sustainability-waf-pillar-fbcf6839413b "medium Mark Faiers") have created excellent summaries and AWS practical advice with their [blog post series](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-i-compute/ "aws blog post series") on sustainability.

Before you start, it's crucial to define metrics, targets, and KPIs. You need to understand where you are starting from in order to measure your progress and success. These are crucial in the other AWS WAR pillars as well. It is a whole topic by itself, and AWS gives a very good starting point in their [blog post series](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-i-compute/ "aws blog post series").

Let's jump in. We structured and adapted contents about this pillar. So, in a nutshell, this is what it includes:

__User behavior patterns__ 👨🏽‍💻
- Cache: with services like e.g. [ElasticCache](https://aws.amazon.com/elasticache/ "ElasticCache") to reduce the load on underlying resources such as databases, and [RDS proxy](https://aws.amazon.com/rds/proxy/ "RDS proxy") for pooling of connections
- Choose AWS Regions for your load near wind turbines and solar plants, which you can find on their interactive [map](https://sustainability.aboutamazon.com/about/around-the-globe?energyType=true "sustainability map").
- Use Cloudfront, e.g., static assets, which also takes advantage of their [edge locations](https://aws.amazon.com/cloudfront/features/?whats-new-cloudfront.sort-by=item.additionalFields.postDateTime&whats-new-cloudfront.sort-order=desc "edge locations")

__Software architecture patterns__ 🏡
- Use containers and serverless, e.g., services like EMR, MSK, Redshift, which offer this feature as well
- Use event-driven architectures because they correlate with the level of usage and scale accordingly 

__Data patterns__ 📑
- Classify data with AWS [Macie](https://aws.amazon.com/macie/ "aws macie") and use [Lifecycles](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html "aws Lifecycles") in S3
- Before sending, compress data with compression algorithms like [brotli](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html "aws brotli"), for example, at the CloudFront distribution
- Use data formats like Parquet, for example, when working with AWS [Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/ "aws athena"), to keep query sizes low

__Hardware patterns__ 🖥
- Scale based on the utilization or prediction which is now [natively part of](https://aws.amazon.com/blogs/aws/new-predictive-scaling-for-ec2-powered-by-machine-learning/ "machine learning") Auto-scaling groups (ASG)
- Use [Graviton V2](https://aws.amazon.com/ec2/graviton/ "aws Graviton V2"), Spot & Burstable instances and check the data in [AWS Cost Explorer](https://aws.amazon.com/aws-cost-management/aws-cost-explorer/ "AWS Cost Explorer") to find the right size for your instances
- Use managed services wherever possible as AWS constantly improves the efficiency under the hood. Additionally you can use the [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer "AWS Compute Optimizer") for EC2, EBS volumes and Lambda functions

__Development and deployment process__ 🏗
- Rewrite *everything* in Rust or any other low footprint language like [Golang](https://golang.org/ "golang") or spot already expensive lines of code at development time with [AWS CodeGuru](https://aws.amazon.com/codeguru/ "AWS CodeGuru")
- Create software with backward compatibility of versions so that customers do not need to buy new devices (and so there is enough space on the old ones), especially API backward compatibility
- Update libraries and other software, or let it automatically get upgraded from Services like the AWS Systems Manager [Patch Manager](https://docs.aws.amazon.com/de_de/systems-manager/latest/userguide/systems-manager-patch.html "Patch Manager")
- Build sustainability into your Software Development Cycle (SDLC): shift-left like, e.g., security
- Update your OS regularly, and use [golden images](https://aws.amazon.com/blogs/mt/tag/golden-image/ "golden images")

__Use SSM and [CloudShell](https://aws.amazon.com/cloudshell/ "aws CloudShell") instead of bastion hosts__

After summarizing this pillar from our point of view, let's talk briefly about the design principles which navigate us through all other pillars as well.

## Design principles

All pillars have their own design principles, which will also guide us through this one. They summarize the pillar as follows:

- __Understand your impact:__ Measure the impact of your cloud workload to establish key performance indicators (KPIs)
- __Establish sustainability goals:__ For each cloud workload, establish long-term sustainability goals.
- __Maximize utilization:__ Right-size workloads and implement an efficient design to ensure high utilization and eliminate or minimize idle resources.
- __Anticipate and adopt new, more efficient hardware and software offerings:__ Continually monitor and evaluate new, more efficient hardware and software offerings and design for flexibility to rapidly adopt new efficient technologies.
- __Use managed services:__ Sharing services across a broad customer base helps maximize resource utilization with managed services, such as AWS Fargate for serverless containers or even multi-tenant EKS clusters. Moving infrequently accessed data to cold storage with Amazon S3 Lifecycle configurations or Amazon EC2 Auto Scaling to adjust capacity to meet demand.
- __Reduce the downstream impact of your cloud workloads:__ Test using device farms to understand the expected effects and test with customers to understand the implications of using your services.

Keeping the design principles in the back of your head, the question is now how to improve your workloads? We will talk about this in the next section. And you can find all the material in the official AWS [whitepaper](https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/sustainability-pillar.html "aws whitepaper") focusing on the [design principles](https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/design-principles-for-sustainability-in-the-cloud.html "aws design principles").

## Improvement process

The architectural improvement process includes understanding what you already have and what you can do to improve, selecting targets for improvement, testing and adapting them, and quantifying your success. Afterwards you share what you have learned so that it can be replicated elsewhere, and then you repeat the cycle ♻️

__1 Improvements__
- Identify workloads
- Evaluate their potential
- Prioritize and plan: identify the low hanging fruits
- Test and validate

__2 Deploy changes to production__
__3 Measure results and replicate successes__

---

## Conclusion

After talking about our approach at kreuzwerker, the pillar in a nutshell, its principles and the improvement process, we want to emphasize that knowing how efficient your resources are is crucial when optimizing your AWS infrastructure for environmental sustainability. Using the fewest number of resources possible and using them to their fullest will have the lowest impact on the environment. Split in 3 categories it's

- __Compute__ efficiency: track metrics like "Total vCPUs hours", and yes they will increase
- __Storage__ efficiency includes right-sizing storage volumes, choosing storage tiers depending on data access patterns, and compressing and converting data.
- __Networking__ efficiency: reduce the network traveled per request via CDN, edge services, data sizes 

To round this post up, in addition to the technical facts, we would also like to emphasize how kreuzwerker internally drives and supports sustainability. Here are a few questions and steps we identified for ourselves

- We could reuse more items, repairing them instead of buying new.
- We could re-use water and do more gardening to supply ourselves.
- We could buy electric cars if a new one is needed - but driving an old car, which is well maintained as long as possible if energy efficient.
- We can educate our kids about the importance of the ecological and sustainable way of life.

Also we know that healthy and sustainable food can be a powerful driver for change. But as with many of the topics about improvements, it opens up new questions such as

- What is sustainable food? How do we eat more sustainably?
- How is food critical in our fight against climate change?
- How do we navigate the jungle of bio, fair, regional, and organic certifications?

Take care and the final words are: we're happy to perform an AWS Well-Architected Review with you. Contact us directly via our __Contact Form__ or send us an E-Mail.