AWS Savings Plans

Complete FinOps Guide
Chapter 3.3 Drilldown: AWS Savings Plans

AWS Savings Plans offer AWS subscribers a flexible pricing model by providing lower prices for a select set of services. By agreeing to a specific usage commitment, measured in $/hour, you can save as much as 72% compared to On-Demand pricing. AWS Savings Plans run on a one or three-year commitment and are available for Amazon EC2, AWS Lambda, AWS Fargate, and Amazon SageMaker. This article will provide a comprehensive overview of AWS Savings plans and review the differences between Savings Plans and Reserved Instances.

What is an AWS Savings Plan?

AWS Savings Plans are an AWS feature that allows subscribers to pay lower costs in exchange for committing to use particular services for a one or three-year period. Along with other AWS cost-saving features such as Spot Instances and Reserved Instances, Savings Plans allow you to meet the objectives of the AWS Well-Architected Framework's Cost Optimization Pillar.

AWS offers three different Savings Plans: Compute Savings Plans, EC2 Instance Savings Plans, and Amazon SageMaker Savings Plans. Below are the details of each plan.

Compute Savings Plans

AWS Compute Savings Plans offer the most flexibility. Leveraging this model, AWS subscribers can save as much as 66% of their compute costs compared with standard On-Demand pricing. This discount applies to AWS EC2 instances regardless of the instance family, size, availability zones, region, operating system, or tenancy.

You can also commit to an AWS Compute Savings Plan for Fargate and Lambda usage. The primary benefit of this plan is its flexibility. For example, you can change instances, shift workloads to another region, and even move a workload from EC2 to Fargate or Lambda and continue paying the Savings Plan price.

EC2 Instance Savings Plans

AWS EC2 Instance Savings Plans offer the most significant cost saving. AWS subscribers that take advantage of this benefit can receive a discount of up to 72% of the standard On-Demand pricing. As with the AWS Compute Savings Plan, the subscriber needs to commit to a particular usage per hour for a one or three-year period.

The primary difference between the EC2 and Compute Savings Plans is the flexibility available in each model. With an EC2 Instance Savings Plan, you must commit to a particular instance family in one specific region, such as M5 usage in North Virginia. You can, however, change your usage between instances within a family in that region. For example, you can move from a c5.large running Windows to a c5.xlarge running Linux.

As with the Compute Savings Plan, you can apply the EC2 Instance Savings plans to the selected instance family in a particular region regardless of the size, availability zones, operating system, or tenancy.

Amazon SageMaker Savings Plans

Amazon SageMaker Savings Plans can help you reduce costs by up to 64%. As with the Compute and EC2 Instance plans, this Savings Plan requires a one or three-year usage commitment measured in $/hour. It automatically applies to the following eligible SageMaker ML instances:

  • SageMaker Studio Notebook
  • SageMaker On-Demand Notebook
  • SageMaker Processing
  • SageMaker Data Wrangler
  • SageMaker Training
  • SageMaker Real-Time Inference
  • SageMaker Batch Transform

This AWS Savings Plan also offers the flexibility you need to migrate workloads. For instance, you can change usage from a CPU instance ml.c5.large running in US West to an ml.inf1 running in US East for inference workloads. You can also set an Amazon SageMaker Savings Plan regardless of region, size, or instance family.

AWS Saving Plans Benefits

The core benefit of AWS Savings Plans is the significant cost savings AWS subscribers receive compared with standard On-Demand pricing. In addition to discounts of up to 72%, AWS Savings Plans are flexible and easy to use. Let’s take a closer look at each of these key benefits.

Cost Savings

As we’ve seen, AWS Savings Plans offer significant cost savings. However, the savings differ from plan to plan and within each plan. For example, if you leverage a Compute Savings Plan, you can achieve higher discounts when you take advantage of new instance types. Further, this plan type also rewards you for modernizing your application and migrating your workloads to AWS Lambda or Fargate.

In addition to leveraging new instance types and migrating workloads, the commitment term also determines your final cost-saving. For example, an a1.medium running Linux in Ohio will save you 27% if you commit to usage for one year. Over a three-year period, the saving for the same instance increases to 50%. The cost-saving increases even further to 55% if you pay for all the costs upfront. As there are so many variables, selecting the best option for you can be challenging. However, using the AWS Savings Plan Cost Calculator can help you make the appropriate financial decision that best aligns with your requirements.

Flexibility

Another significant benefit of using an AWS Savings Plan is the flexibility this pricing model offers. For example, the Compute Savings Plan does not lock you into using a particular instance in a specific region for a set period of time. Likewise, the Amazon SageMaker Savings Plan also allows you to move to different instance types and regions. Even the EC2 Instance Savings Plan offers some flexibility as you can move between instance families in the same region.

Easy of Use

AWS has made it simple to purchase and get started with a Savings Plan. First, it leverages AWS Cost Explorer to create recommendations based on your requirements. Then, from that interface, you simply add the relevant plan to the cart and purchase it.

AWS Cost Explorer further aids you in choosing the best option by recommending the hourly commitment based on your historical On-Demand usage, choice of plan type, term length, and payment option.

How do Savings Plans differ from Reserved Instances?

The main difference between an AWS Savings Plan and Reserved Instances is the commitment made by the AWS subscriber at the time of purchase.

AWS Savings Plans offer a discount based on a committed spend in dollars per hour over a one or three-year period. On the other hand, Reserved Instances provide AWS subscribers with cost-savings based on their committed utilization over the same one or three-year period.

Another difference between an AWS Savings Plan and a Reserved Instance is the flexibility to apply the amount spent on AWS Lambda and Fargate. However, if you choose an EC2 Savings Plan instead of a Compute Savings Plan, Reserved Instance configurations have similar flexibility and cost savings. The tables below outline the different scenarios.

Fixed Reserved Instances versus AWS EC2 Instance Savings Plans
Element Reserved Instance AWS EC2 Instance Savings Plans
Commitment Per Instance Dollar per hour
Instance Family Fixed Fixed
Geographic Flexibility Zone or Region Specific Region Specific
Tenancy Fixed Any Tenancy
Operating System Fixed Any Operating System
Convertible Reserved Instances versus AWS Compute Savings Plans
Element Reserved Instance AWS Compute Savings Plans
Commitment Per Instance Dollar per hour
Instance Family Exchangeable Any Family
Geographic Flexibility Zone or Region Specific Any Region
Tenancy Exchangeable Any Tenancy
Operating System Exchangeable Any Operating System

The primary reason for opting to purchase a Reserved Instance or an AWS Savings Plan is the significant cost savings. The table below outlines the various cost savings for a sample of EC2 instance types. For the comparison, a three-year commitment with no upfront payment was used as a common setting. A common region of US East (N. Virginia) and a Linux operating system were used for all calculations. The columns containing a percentage indicate the additional available discounts as compared to a standard reserved instance (used as a reference).

Hourly pricing for various EC2 instance examples
Instance a1.medium c5.large c6g.medium g3.4xlarge m5a.large
Standard Reserved Instance $0.0110 $0.0360 $0.0147 $0.5810 $0.0370
Convertible Reserved Instance $0.0127 $0.0410 $0.0164 $0.6682 $0.0430
Convertible RI Discount v. Standard Reserved -15.45% -13.89% -11.56% -15.01% -16.22%
AWS Compute Savings Plans $0.0127 $0.0410 $0.0164 $0.6682 $0.0430
Compute Savings Plans Discount v. Standard Reserved -15.45% -13.89% -11.56% -15.01% -16.22%
AWS EC2 Instance Savings Plans $0.0110 $0.0360 $0.0147 $0.5810 $0.0370
EC2 Instance Savings Plans Discount v. Standard Reserved 0.00% 0.00% 0.00% 0.00% 0.00%

This table illustrates that Convertible Reserved Instance pricing equals that of the AWS Compute Savings Plan. Similarly, The Standard Reserved Instance pricing equals that of the EC2 Instance Savings Plan. The results show that there is no discount parity between these cost optimization options. However, the Savings Plans do offer a little more flexibility.

Getting started with AWS Savings Plans

Now that you know what Savings Plans are and how they work, let’s jump into actually working with them on the AWS platform.

Prerequisites

The first step in getting started with AWS Savings Plans is to enable Cost Explorer. AWS uses this service to recommend the hourly commitment based on your historical On-Demand usage, choice of plan type, term length, and payment option. To enable AWS Cost Explorer, navigate to it in the AWS Console Menu, and click on the link under AWS Cost Management, as shown in the image below.

AWS console for configuring Savings Plans

Once you access it for the first time, AWS will start the processes to enable it.

Enable the Savings Plan

You can also purchase AWS Savings Plans by calling the dedicated API. The table below details the relevant actions and request syntaxes.

AWS Savings Plans API Actions
Action Syntax
CreateSavingsPlan
POST /CreateSavingsPlan HTTP/1.1
Content-type: application/json

{
   "clientToken": "string",
   "commitment": "string",
   "purchaseTime": number,
   "savingsPlanOfferingId": "string",
   "tags": { 
      "string" : "string" 
   },
   "upfrontPaymentAmount": "string"
}
DeleteQueuedSavingsPlan
POST /DeleteQueuedSavingsPlan HTTP/1.1
Content-type: application/json

{
   "savingsPlanId": "string"
}
DescribeSavingsPlanRates
POST /DescribeSavingsPlanRates HTTP/1.1
Content-type: application/json

{
   "filters": [ 
      { 
         "name": "string",
         "values": [ "string" ]
      }
   ],
   "maxResults": number,
   "nextToken": "string",
   "savingsPlanId": "string"
}
DescribeSavingsPlans
POST /DescribeSavingsPlans HTTP/1.1
Content-type: application/json

{
   "filters": [ 
      { 
         "name": "string",
         "values": [ "string" ]
      }
   ],
   "maxResults": number,
   "nextToken": "string",
   "savingsPlanArns": [ "string" ],
   "savingsPlanIds": [ "string" ],
   "states": [ "string" ]
}
DescribeSavingsPlansOfferingRates
POST /DescribeSavingsPlansOfferingRates HTTP/1.1
Content-type: application/json

{
   "filters": [ 
      { 
         "name": "string",
         "values": [ "string" ]
      }
   ],
   "maxResults": number,
   "nextToken": "string",
   "operations": [ "string" ],
   "products": [ "string" ],
   "savingsPlanOfferingIds": [ "string" ],
   "savingsPlanPaymentOptions": [ "string" ],
   "savingsPlanTypes": [ "string" ],
   "serviceCodes": [ "string" ],
   "usageTypes": [ "string" ]
}
DescribeSavingsPlansOfferings
POST /DescribeSavingsPlansOfferings HTTP/1.1
Content-type: application/json

{
   "currencies": [ "string" ],
   "descriptions": [ "string" ],
   "durations": [ number ],
   "filters": [ 
      { 
         "name": "string",
         "values": [ "string" ]
      }
   ],
   "maxResults": number,
   "nextToken": "string",
   "offeringIds": [ "string" ],
   "operations": [ "string" ],
   "paymentOptions": [ "string" ],
   "planTypes": [ "string" ],
   "productType": "string",
   "serviceCodes": [ "string" ],
   "usageTypes": [ "string" ]
}
ListTagsForResource
POST /ListTagsForResource HTTP/1.1
Content-type: application/json

{
   "resourceArn": "string"
}
TagResource
POST /TagResource HTTP/1.1
Content-type: application/json

{
   "resourceArn": "string",
   "tags": { 
      "string" : "string" 
   }
}
UntagResource
POST /UntagResource HTTP/1.1
Content-type: application/json

{
   "resourceArn": "string",
   "tagKeys": [ "string" ]
}

Supported Services

AWS Savings Plans offer significant cost savings. However, they only apply to a subset of services available on the AWS platform. The table below provides the list of supported services and a brief description of each.

AWS Services Supported by Savings Plans
AWS Service/th> Brief Description
Amazon EC2 Amazon Elastic Cloud Compute (EC2) is AWS's Infrastructure as a Service (IaaS) offering for compute workloads. It allows you to create and manage virtual machines on the AWS platform eliminating the need to invest in expensive hardware and software.
AWS Fargate AWS Fargate is AWS's serverless compute engine for containers. It works with Amazon Elastic Container Service (Amazon ECS) and Amazon Elastic Kubernetes Service (Amazon EKS). Fargate improves development efficiency as it removes the need to provision and manage servers. Instead, it lets you focus on building applications allowing you to pay for resources on a per-app basis.
AWS Lambda AWS Lambda lets you run code without provisioning or managing servers. It is a compute service that scales automatically and uses a billing model where you only pay for the time your app consumes the allocated compute resources. AWS Lambda allows you to run code with zero administration and provides high availability through its compute infrastructure.
Amazon SageMaker Amazon SageMaker is AWS's fully-managed machine learning service. It allows data scientists and developers to build and train machine learning models and deploy them directly into a production-ready environment. In addition, Amazon SageMaker offers an integrated Jupyter authoring notebook instance for easy access to data sources, removing the need for you to manage servers.

Purchasing Savings Plans

The most straightforward way to purchase an AWS Savings Plan is via AWS Cost Explorer. It will help you choose an appropriate plan and guide you through the purchase process, as detailed in the images below.

Click on Recommendations under Savings Plans on the vertical menu.

AWS Savings Plans recommendations menu

AWS Cost Explorer will display your recommendations based on your usage history, instance type, and region.

AWS Savings Plans recommendations

You can then click on 'Add Selected Savings Plan(s) to cart.’

AWS Savings Plans purchase

Alternatively, you can also create a Savings Plan without using the AWS Cost Explorer recommendations by clicking on Purchase Savings Plans, as shown in the image below.

AWS Savings Plans purchase menu

In the example below, we have chosen to purchase a Compute Saving Plan for one year with an hourly commitment of $1 and no upfront payment.

AWS SP details screen

Understanding AWS Savings Plan Recommendations & Costs

Let's consider the details provided in the example recommendation below. You can see three highlighted amounts - Monthly On-Demand spend, Estimated monthly spend, and Estimated monthly savings.

AWS Savings Plans recommendation explanation
Monthly On-Demand Spend
This amount is the actual current spend. In this example, it is the average spend over 60 days. You can change this setting by toggling the filter selected at the top of the Recommendations options page.
Estimated Monthly Spend
This amount is the estimated amount you will spend should you accept the AWS Cost Explorer recommendation. You will note that the advice is to purchase a three-year Compute Savings Plan at a commitment of $2.40 per hour to be paid in full upfront. However, the Estimated Monthly Spend quotes a rate of $2.44 per hour. The difference is the addition of $0.04 per hour that AWS Cost Explorer expects as an On-Demand Spend overrun.
Estimated Monthly Savings
This amount calculates the monthly savings by multiplying the expected usage by the hourly savings of the AWS Savings Plan. In the example, the saving is $1.61 per hour, equating to a 40% reduction in cost.

Monitoring and Evaluating your AWS Savings Plans

As with any cloud-based service, monitoring usage patterns is vital in achieving cost optimization. AWS gives you four options you can leverage to understand the AWS Savings Plans you own, how the service applies the usage commitment you purchased, and what usage your plan(s) cover. Here, we’ll take a look at each of those options.

Using the Inventory

The Savings Plan Inventory page, which you can find by navigating to AWS Cost Management →Savings Plans → Inventory, offers a detailed overview of Savings Plans you own and any you may have in a queue for future purchases. As shown in the image below, the Inventory provides details in a table format.

AWS Savings Plans inventory

Using the Utilization Report

You can also leverage the Savings Plans Utilization Report to manage and monitor the state of your plans. You can find it by navigating to AWS Cost Management → Savings Plans → Utilization Report. This report provides these high-level metrics:

On-Demand Spend Equivalent
This would be the amount you would have spent on the identical usage if you did not have Savings Plans.
Savings Plans Spend
Your Savings Plans spend over the reporting period.
Total Net Savings
The amount you saved by utilizing Savings Plans commitments over the reporting period, compared to the On-Demand cost estimate.

Using the Coverage Report

The AWS Savings Plan Coverage Report, which you can find by navigating to AWS Cost Management → Savings Plans → Coverage Report, is another tool you can use to manage and monitor your AWS Savings Plans. This report provides the following metrics:

Average Coverage
The consolidated Savings Plan coverage as a percentage based on the selected filters and reporting period.
Additional potential savings
Any potential savings amount, shown as a monthly total. AWS calculates this amount using the Savings Plans recommendations from AWS Cost Explorer.
On-Demand spend not covered
The amount of eligible savings spend Savings Plans or Reserved Instances did not cover over the reporting period.

Using Budgets

The fourth and final tool you can use to manage and monitor your AWS Savings Plans is the AWS Cost Management Budgets feature. Using this service, you can create and manage budgets, receive budget reports, and create notifications for budget elements. For instance, you can use the Savings Plans budget type to set a utilization or coverage threshold. Should your usage exceed any of these configured limits, this tool will send you a notification.

Limitations of AWS Saving Plans

AWS Savings Plans offer significant discounts and provide the flexibility needed to make changes after committing to a plan. However, this feature has a few limitations that you need to consider before taking advantage of any cost savings.

Limited Services
You cannot purchase an AWS Savings plan for all the services available on the AWS platform. AWS limits this cost-saving feature to EC2 instances, Fargate, Lambda, and SageMaker.
Commitment Lock-In
Once you have purchased an AWS Savings Plan, you cannot resell or offload any underutilized commitments.
Pricing Model
AWS Savings Plans charge On-Demand prices for any overuse. This limitation could result in you exceeding your budget should you discover during a plan's period that your usage increases exponentially.
Capacity
Unlike zonal Reservations (reservations made within a fixed availability zone), AWS Savings Plans do not provide capacity reservations.
Discount Parity
AWS Savings Plans do not offer better discounts than Reserved Instances. However, they do provide greater flexibility.

Conclusion

AWS Cost Savings plans offer several benefits. However, to get the best possible cost optimization from your AWS investment, your FinOps cost optimization strategy requires a blended approach. The ideal solution is to consider each workload and then select the best cost-saving option. Ultimately, you will find that using a combination of AWS Saving Plans, Reserved Instances, and Spot Instances is the best approach.

Continue Reading this Series