When you migrate applications to AWS, it can be difficult to adjust to a cloud cost model. On-premises applications have a combination of capital expenses and fixed operational expenses; AWS-based applications have entirely variable operational expenses, based on resources consumed.
Organizations can overcome these billing variability challenges if they set the right parameters and know how to avoid unnecessary charges. In this tip, we'll review some common cost pitfalls that cause AWS bills to spike and offer a few ways to reduce the risk of exceeding your cloud budget.
AWS bill shock
While you should expect some fluctuation in your AWS bill due to changes in usage and other variables, there are choices that will drastically increase your costs on the cloud platform if you're not careful.
Data transfers are the most common cause for billing surprises. There is no cost to transfer data into AWS, but there are charges for transferring data out of AWS or into another region or service. The figures vary by service and region, but transfers out of EC2 or S3 in the U.S. East-1 Region, for example, can cost from $0.01 to $0.09 per GB.
Your AWS architecture design should account for efficient, cost-effective data transfers. And if you are moving a lot of data from AWS to your private data center, then consider AWS Direct Connect, which has lower costs per gigabyte.
The other common AWS billing surprise is just how expensive guaranteed performance is -- for both block storage and managed databases. If you need guaranteed storage performance for EC2 instances that run critical applications, including those that rely on Amazon Relational Database Service, you should use Provisioned IOPS in Elastic Block Store. IOPS cost can easily exceed capacity cost, or even EC2 compute cost. Similarly, DynamoDB can deliver extremely fast throughput if you use a lot of Read and Write Capacity Units, but you end up paying for each capacity unit, so make sure you get business value from those costs.
Manage AWS costs and billing
There a few simple ways to understand and reduce your AWS cloud bill. Let's review some of the tools and techniques you should be familiar with to help control your costs.
Set up billing alerts
In the AWS Billing and Cost Management console, use AWS Budgets to keep tabs on your spending. You can customize AWS Budgets to send alerts when you exceed a range of thresholds around cost and usage.
Start with an alert that will warn you when your bill will go over a predetermined limit. Use the forecasted cost mode to be notified if extra resources are being consumed that will lead to a large bill. This enables you to respond proactively, rather than waiting for the hefty bill to arrive.
Explore AWS cost tools
AWS Cost Explorer analyzes historic account data and project spending for the next three months. You can then graph daily cost trends and enable the tool's Rightsizing Recommendation feature to know when to change your instance type to lower costs, without sacrificing application performance.
Cost Explorer provides EC2 utilization and coverage reports that help plan your use of EC2 Reserved Instances, which provide significant discounts in exchange for long-term commitments.
If you've been too liberal with EC2 Auto Scaling and now want to curb those costs, then you should limit scaling throughout your account. One of the parameters for an Auto Scaling group is the maximum size, which limits both the performance and cost for an Auto Scaling group. For applications that do not drive business revenue, you can prioritize costs over performance in your scaling parameters. For a public website or mission-critical manufacturing system, it's probably not a good idea to cap performance. But for post-sales interactions and reporting functions, it often makes sense to degrade performance rather than increase cost.
AWS bills should vary
Even if you utilize all of these tips to avoid unexpected billing surprises, don't expect your AWS bill to be the same every month. If it is, then you're probably still doing something wrong. One of the main benefits of using AWS is the ability to scale up or down and only pay for the resources you consume. Applications that are best suited for the cloud are those that can respond to changes in business demand.
When you use EC2 Auto Scaling groups for compute resources, the number of EC2 instances changes as the load changes, and so does the total cost. In addition, AWS storage and database services typically charge for the storage you consume, so those costs should rise as you add data over time. Those same services often charge for the number of transactions, so again, cost is related to load.
In an ideal world, where everything is properly optimized, a larger cloud bill means you did more business and earned more revenue that month.