10 Ways to Reduce Cloud Spend
Did you get your latest AWS bill and have a bit of sticker shock? That seems to be a common reaction as businesses migrate workloads out of data centers and into public cloud services. I created this list of 10 ways to reduce cloud spend. I have used these techniques to save millions of dollars in OpEx.
There is often a rush by businesses to migrate their platforms into the cloud. Legacy applications as well as older design patterns may not be cost efficient in the cloud. Old habits of over-provisioning just in case may be hard to break. The ease of creating resources may mean you have a lot of abandoned resources you are unaware of.
There are a multitude of reasons why you may be overpaying. The good news is that many of these costs can be brought easily under control.
Depending on your application’s architecture your monthly bill could easily crack $1M. At least it isn’t CapEx, am I right?
Cutting Your Cloud Spend
It is likely that there are some things you can do that will make a dramatic impact on your bill. It is not unreasonable that cost optimization can cut your bill by 50% or more if your applications are not optimized for cost in the cloud.
I have used the items below with good success to reduce the operating expense of multiple software products. These items are written from the perspective of AWS as that is where my experience lies, though the concepts should apply to the other cloud providers as well.
10 Ways to Reduce Cloud Spend:
- Use tools to analyze where your spend is
Determine where your money is going so you know where to concentrate on. You can use your cloud services billing panel but this is often inadequate. Available services like CloudHealth and CloudChekr make this process a lot easier. Depending on the number of cloud resources you have, you may need to have the resources tagged for these tools to really paint a good picture of where your money is going.
- Take Advantage of Reserved Instance Pricing
Determine your baseline capacity and purchase it as reserved instances. You can save 30% or more on your bill just by doing this one step! Often the lion’s share of your cloud bill is compute and database. Both of these can be purchased on reserved instance terms which significantly reduce their cost.
- Take advantage of lifecycle policies for storage
S3, and now EFS, both have life cycle policies that are easy to implement. You can set triggers that move your files to progressively less expensive storage over time. Savings of over 50% on storage, and in some cases over 90% is possible. These policies automate the management of the data according to your business rules and ensure you don’t pay any more than you need to.
- Set Up Seasonal Scaling Plan
If your traffic has seasonal spikes then you can set up a seasonal scaling plan. Retailers that see a spike in traffic around peak shopping periods, tax season, educational software during school, etc. all should see uneven demand based on the calendar. Take advantage of this by scaling down your resources in the off peak periods of the year. Automate the scale down and back up so that you can perform the process easily and on demand.
- Vertically Scale Down and add Horizontal Auto Scale
This only applies if your applications support auto scaling. AWS prices scale linearly with the vertical size of the resource. An a1.large with 2 CPU 4G is exactly half the cost of an a1.xlarge with 4 CPU and 8G of RAM. Reducing the size of your instances to no more than what is needed allows you to more effectively take advantage of auto scaling to prevent overpaying for resources.
- Identify Where Architectural Changes Can Help
Architectures that were cost effective in the data center might not be in the cloud. Re-developing parts of your application might not be free, but the return on investment can sometimes make it worth it. Changing applications to support auto scaling, function as a service and more cost effective storage can sometimes dramatically reduce your cloud bill. I have re-architected a key part of a legacy application to move image processing code into Lambdas and off of EC2s. This one change cost around 3 man months of development time and reduced the application’s OpEx by $200,000/year. As a side benefit, the application was made more scalable and fault tolerant as well.
- Automate Scale Down and Shut Down of Lower Environments
Lower environments are often not given the same attention as production. Development, Test and Stage environments can often be over-provisioned dramatically and left running 24×7. You should start by checking low hanging fruit are auto scale groups turned down low and checking for appropriate vertical scale. One you are sure the environments are not over-provisioned, look into automating a shutdown and restart of resources based on your work schedule. Very few companies use these environments 24×7, so automating the shutdown of unused resources in off hours can dramatically reduce the cost of these environments with little to no business impact.
- Create a Waste Bounty
The problem with trusting developers to cost optimize is one of incentive. Developers are not normally incentivized to make cost effective software. How many parts of your application had developers doing a cost benefit analysis of the different architectures and tools available before they built it? Yeah, I didn’t think so. Make finding waste worth their while. Give a spot bonus equivalent to part of the savings for finding and fixing wasteful spend. You might be amazed at how much waste the developers will suddenly find.
- Take Advantage of Spot Instances
AWS offers their unused capacity as spot instances at a greatly reduced price from on demand. There are plenty of drawbacks to using spot instances and not every application architecture can make use of them. If yours can take advantage you can save 90% on your compute costs. It is probably worth having and engineer do an evaluation on possible use cases.
- Use Managed Services
While this might not technically lower your cloud bill it can lower your total OpEx. Managed services take most of the DevOps type tasks off your plate. Managed database services like AWS RDS and DynamoDB typically cost more than hosting a database on an EC2 and managing it yourself but you won’t need DBAs to manage them anymore. I also think managed services pay for themselves not just in reduced labor expense, but also in a reduced chance that your labor makes a mistake that puts your stability or data at risk.
I hope the list above gives everyone some ideas on where to start looking at reducing their cloud spend. I know from experience that many workloads can have their cost reduced by over 50% by taking the steps in this list.
Some organizations will benefit more than others, but I have yet to see a cloud bill that has no waste in it. Taking the steps listed here should give you plenty of ideas on where to begin managing the cloud costs for your business.