Sustainability means "meeting the needs of the present without compromising the ability of future generations to meet their needs," according to the Brundtland Commission. For cloud sustainability, it means addressing the long-term environmental, economic, and societal impact of your business activities. Last year at re:invent 2021 AWS introduced the new Sustainability Pillar for AWS Well-Architected Framework and at the beginning of this year AWS introduced the AWS Customer Carbon Footprint Tool. According to the energy transition plan, Amazon is on the path to powering its operations with 100% renewable energy by 2025. But environmental sustainability is a shared responsibility between you and AWS. This means that AWS maintains the sustainability of the cloud by delivering efficient, shared infrastructure, and you should optimize your workload to efficiently use these resources.
In this post, I will use the design principles for sustainability in the cloud from the Sustainability Pillar of the Well-Architected Framework to explain how to design your workloads to maximize sustainability and minimize impact.
- Understand your impact.
- Establish sustainability goals.
- Maximize utilization.
- Anticipate and adopt new, more efficient hardware and software offerings.
- Use managed services.
- Reduce the downstream impact of your cloud workloads.
Understand your workload’s environmental impact using metrics to see if you meet your sustainability goals:
- AWS Customer Carbon Footprint Tool
- AWS Compute Optimizer now offers resource efficiency metrics
- RDS Utilization Metrics
Establishing short and long-term sustainability goals for your workload, such as reducing the computed resources required per transaction or improving the power efficiency of your compute workload, reducing the network data traveled per request. For example, even if you are not able to go serverless with your application in the first step, you can start to decouple parts of your workload and create small functions to get there in the long run. Other options would include containerizing your workloads or improving the energy efficiency of your compute load by moving to Graviton2-based instances and/or functions. There are multiple transformation guides for transitioning workloads to AWS Graviton2 (EC2, Lambda, RDS & Aurora ). Here is also a nice list of AWS services where graviton processors are available.
To reduce the network data traveled per request, I can recommend you to use a CDN. When requested, the static content is cached from the original server and delivers it to the user. This shortens the distance each packet has to travel. If you use CloudFront as your CDN, you should also enable automatic compression - it will compress certain types of files and serve the compressed objects when viewers support them.
Use tools like AWS lambda power tuning, and AWS Compute Optimizer to right-size your resources. In addition, you should use Auto Scaling to automatically scale up and down based on demand. To improve the overall resource efficiency and reduce idle capacity in the entire Cloud AWS, use Amazon EC2 Spot Instances. Spot Instances are unused EC2 capacity in AWS, this instance also gives you up to a 90% discount compared to On-Demand prices. If you are using EKS you should follow the EKS Best Practices Guides - especially the Auto Scaling guide to improve the utilization of your nodes. Moreover, you should generally adopt a serverless, event-driven architecture to maximize overall resource utilization.
To improve the utilization of your AWS storage layer, you should analyze data access patterns to move the storage to different storage classes, with efficient long-term storage, you will optimize your storage footprint. To automatically move the data to another storage class or delete unused data, you can use lifecycle configurations. The following services can configure the lifecycle of your data:
As already mentioned in the Establish sustainability goals section, you should always make sure to use the latest hardware generation such as Graviton processors, or when it comes to GPU usage you should use flexible graphics acceleration rather than dedicated GPU instances. The same counts for your software and its dependencies. Not only from the security aspect, you should always stay up to date or maybe change to a newer programming language that uses hardware resources even more efficiently.
Use managed services, such as Amazon MSK Serverless (GA since 28 April 2022), Amazon Aurora Serverless v2, or Amazon SageMaker Serverless Inference, to help distributing workloads while reducing the overall amount of infrastructure required. This also shifts the responsibility of sustainability optimization to AWS.
To reduce the amount of energy that is required to use your services always stay up to date with the evolution of hardware and software features like:
- Use efficient programming languages like Rust
- Use efficient processors to run your workloads like Graviton - the newest generation 3 will consume up to 60% less energy than the generation 2
- Analyze the performance of your application using CloudWatch Logs Insights to find the performance guzzler
We at globaldatanet also want to contribute to making the world a little greener and better. Therefore, we have decided to work with Eden Reforestation Projects, one of the world's best reforestation partners, and from now on we will plant 1000 new trees every single month. If you want to learn more about that, have a look at our sustainability page.