Amazon Web Services offer a fantastic portfolio of services to accelerate software development in your company, allowing your IT team to focus on delivery and innovation rather than provisioning and managing datacentre infrastructure. But without the right levels of governance and control around your AWS environment, your bills can easily spiral out of control, causing friction between your technical and financial teams. But fear not, it is possible to put guard rails in place without hampering the pace of innovation in your business. There are many areas that you need to address to ensure that you are not spending more on AWS Managed Services than you need to, but here are my top 5 tips on where to focus your energy initially:
1. Use Reserved EC2 Instances or Compute Savings Plans
By default, when you create an EC2 instance on AWS it will be on a Pay as You Go pricing plan, where you pay by the hour while the instance is running. If you need to run the EC2 instance 24x7x365, you can get up to 72% discount by committing to that instance for 12 or 36 months. You have the option to pay for the reservation all upfront, partial upfront, or no upfront, with all upfront attracting the highest level of discount.
In addition to instance reservations, AWS recently launched ‘Savings Plans’ – instead of a term commitment, you can commit to an hourly spend on computing resources, which can be applied to any computer services and save you up to 66% over PAYG pricing.
2. Right-size your EC2 Instances
AWS offers over 80 different instance types, with different CPU and RAM combinations, and other optimizations for specific workload types. So, it’s possible that you may have instances that are not optimized for your specific workloads. It is important to monitor utilization on your EC2 instances, and if resources are frequently underutilized, you should downgrade to an instance which is a better fit for your workloads, to avoid paying for more resources than you need.
3. Remove Unused ‘Zombie’ Infrastructure
Because it is so easy for your developers to create new infrastructure on AWS, often infrastructure is created, used and then abandoned. It may be powered on EC2 instances which are not being accessed, powered off instances which are no longer needed, orphaned EBS volumes (disks which are no longer attached to a server), aged snapshots which are no longer required, etc. Keep on top of your zombie infrastructure and delete what you no longer require, so you don’t have to pay for it.
4. Power Off Non-essential Infrastructure Out of Working Hours
If you have development and test environments which are only worked on during the business day, it is easy to automate powering on and off these instances according to a suitable schedule. If your working week is Monday to Friday 9-6, that means that your dev & test environments may only be required for 45 hours a week. There are 168 hours in a week, which means you could be paying to run infrastructure for 123 hours when nobody needs it – that’s over 70% wasted spend! Work out who needs access to what, and when – then automate a schedule to make sure services are only available when required.
5. Leverage AWS Cloud Native Services
If you’re in AWS and only using EC2 instances and S3 storage, for example, there may be more cost-efficient ways to run your applications by leveraging cloud-native Platform as a Service (Paas) and Function as a Service (FaaS) services. AWS Lambda can execute your code only when called upon via an API, so you only pay for the time the Lambda function is running, which could be fractions of a second, rather than paying to run an instance to host this code. Similarly, a PaaS database may be more cost-effective for you than paying for an instance, with an operating system and database software installed on it.
AWS provides a built-in tool – AWS Cost Explorer – to help you manage your costs. You can also set monthly budgets and receive alerts when budget thresholds are reached. There is also a range of 3rd party software tools that can help with cost management. These tools can be noisy and require a lot of tuning to tune out the noise so you can focus on the important insights. They also require knowledge of how to use the tool and will consume man-hours in your IT Team to operate effectively. The other alternative is to engage the services of an AWS Managed Services provider who will be able to take this burden away from your in-house team. The provider will manage the tool on your behalf, focus on the important recommendations and even implement them for you given the right level of access to your AWS environment.