Published by CloudNation on Sep 13, 2021 1:27:24 PM
The need for cloud computing is accelerating rapidly and the modern tech stack increasingly involves the use of cloud resources. But as we all consume more and more cloud, in the same manner our cloud bills grow. How can we keep on leveraging all of the great benefits that cloud has to offer, while retaining the ability to explain to our CFO with a straight face why in the world we send piles of cash to Microsoft and/or Amazon?
While I would focus our conversation on the global and massive scalability, engineering time that can be spend more on innovation and building better products instead of trivial tasks, I would also think long and hard about how I could defend myself by saying that we spend cloud money wisely.
To back up that last point, I would look into ways how we optimize cloud costs as an organization. To make it sound fancy I would make up a framework and call it something like a TRACM model for practical guidelines of a FinOps culture. Let me introduce you to the five pillars: Terminate, Right size, Awareness, Cost model and Modernizing applications.
There are many ways to terminate what you don't use. You can use Infrastructure as Code's best practices to automate not only deployment but also removal of resources. This DevOps way of working would be ideal for applications in production with all its environments/stages. Furthermore, resources can be terminated and removed with automation. To make this work you could use this in two ways. First, in playground environments engineers try out cloud services that they are not yet familiar with or that are new. To not spend the world in these environments we use Cloud Custodian for automated removal of resources. My colleague Luuk Rutten explains how it works in this video. Second, if you have a solid tagging practice you could have all resources without tags removed automatically.
Having too small resources is bad, we all know that. Applications are not performing good anymore and will end up in unwanted and unplanned downtime. But what about having overprovisioned resources? What costs savings would be achieved if we right size cloud resources? To find the answer it is useful to have automated recommendations, find your highest costs, and know your usage. Want to take the easy route first? Then you can check AWS Trusted Advisor or Azure Advisor to get recommendations on costs, as well on other subjects like performance and security. For usage you can check directly AWS CloudWatch or Azure Monitor or in a third party multi cloud tool like CloudHealth you can also zoom in the resources that are overprovisioned. If configured correctly, CloudHealth will give you similar recommendations in a single pane of view.
Until now, we have focused mostly on technology to solve our problems, but people and processes are equally important. It is important to create awareness in what the cloud spend is within the teams and to have people continually optimize costs. First we need support from management to raise importance on the issue. Second, it is important to have a process on reviewing using and spend on a regular base.
Important Public Cloud services like VM instances with its underlying hardware can be used under different cost models, like on-demand, reserved instances or spot instances. Choosing the right pricing model for your cloud resources will have significant influence on cloud financials. In practice this choice will be made in certain windows of opportunities, like a migration from on-prem to public cloud. To optimize cost, it is necessary to know which workloads have a predictable usage pattern and which have a spikey workload. It also helps to know if an application is stateless or stateful. Using spot instances for stateless applications can also further optimize your cloud bill. It is recommended to set up a Cloud Center of Expertise (CCoE) to guide and actively advise internal stakeholders on these matters.
A more challenging but certainly rewarding option is to modernize your applications. When you update your technology stack you can leverage the latest state of the art technologies to increase efficiency and reduce cost. For example, you could break up a monolith in micro services to use more serverless components. In real life, you could encourage your organization to modernize applications in one of the following manners. First, encourage and empower your internal organization to think about and apply reforms on their architecture. A CCoE could fill in this roll of support. Second, modernizing applications often consist of a trajectory to rewrite code, which will take up considerable time. Therefore, it is recommended to include this activity in your strategic roadmap and align these ambitions with relevant stakeholders. Third, when an agile approach is possible for a certain workload, building a Proof-Of-Concept could be a quick way to get some tangible proof that the solution will work.
As you can see, there are a lot of opportunities to optimize cloud cost. The purpose of this blog is show you all the possibilities and to give you a framework on which you can build your own foundation.
Good luck in your cost optimization journey! And feel free to reach out to us for more advice.