How Do You Exchange Multiple EC2 Convertible RIs?

Exchanging multiple Amazon EC2 Convertible Reserved Instances for a different instance family allows organizations to adapt their cloud compute commitments as workload demands evolve. You can consolidate or merge two or more active Convertible Reserved Instances in the same AWS Region into a new configuration with a different instance family, operating system, tenancy, or payment option. To complete the exchange through the Amazon EC2 console or AWS Command Line Interface, the new target reservation must have an equal or greater total commitment value than the combined remaining value of the original reservations, and it cannot downgrade from an All Upfront or Partial Upfront payment option to a No Upfront option.

Prerequisites and Exchange Rules

Before initiating an exchange across multiple Convertible Reserved Instances, verify that your existing reservations and target instance configurations satisfy Amazon EC2 requirements:

  • Active State and Region: All source Convertible Reserved Instances must be in the active state and located within the same AWS Region. You cannot exchange Standard Reserved Instances or combine reservations across different Regions.
  • Equal or Greater Value: The total upfront and recurring commitment of the new Convertible Reserved Instance configuration must be equal to or greater than the remaining value of the combined source reservations.
  • Expiration Date Calculation: When merging multiple Convertible Reserved Instances with different end dates, AWS sets the expiration date of the new reservation to match the furthest expiration date among all the source reservations being exchanged.
  • Payment Option Compatibility: If any of the source reservations use the All Upfront or Partial Upfront payment option, the new target reservation must also use All Upfront or Partial Upfront. You can only select a No Upfront target configuration if every source reservation being exchanged is already a No Upfront reservation.
  • Uncovered Upfront Costs: If the new instance family configuration requires a higher upfront commitment than the remaining upfront credit of the exchanged reservations, you are billed immediately for the true-up difference.

Understanding the Exchange Value Calculation

When you exchange \(n\) Convertible Reserved Instances, AWS calculates the remaining list value of your current commitments and compares it against the list cost of the target instance family over the remaining term.

Let \(V_{\text{old}}\) represent the combined remaining commitment value of the \(n\) source reservations, calculated as:

\[V_{\text{old}} = \sum_{i=1}^{n} \left( U_{\text{rem}, i} + H_{i} \times t_{\text{rem}, i} \right)\]

where \(U_{\text{rem}, i}\) is the prorated remaining upfront value of reservation \(i\), \(H_{i}\) is the hourly recurring rate of reservation \(i\), and \(t_{\text{rem}, i}\) is the remaining hours until reservation \(i\) expires.

The new expiration timestamp \(T_{\text{new}}\) is determined by the maximum expiration timestamp among the source reservations:

\[T_{\text{new}} = \max_{1 \le i \le n} \left( T_{\text{end}, i} \right)\]

For a target configuration of \(N_{\text{new}}\) instances in the new instance family with an upfront cost per instance of \(U_{\text{new}}\) and an hourly rate per instance of \(H_{\text{new}}\) over the remaining duration \(t_{\text{new}}\), the total new commitment value \(V_{\text{new}}\) must satisfy:

\[V_{\text{new}} = N_{\text{new}} \times \left( U_{\text{new}} + H_{\text{new}} \times t_{\text{new}} \right) \ge V_{\text{old}}\]

AWS automatically computes the minimum required instance count \(N_{\text{new}}\) so that \(V_{\text{new}} \ge V_{\text{old}}\) and calculates any true-up upfront payment due at checkout.

Exchanging Multiple Reservations via the AWS Management Console

You can merge and exchange multiple Convertible Reserved Instances simultaneously using the Amazon EC2 console:

  1. Sign in to the AWS Management Console and open the Amazon EC2 dashboard.
  2. In the left navigation pane, choose Reserved Instances under the Instances section.
  3. Select the checkboxes next to the two or more Convertible Reserved Instances that you want to exchange. Verify that the Offering class column shows convertible and the State column shows active for every selected item.
  4. Choose Actions, and then select Exchange Reserved Instance.
  5. In the Exchange Reserved Instances configuration dialog, specify the target attributes for your new reservation:
    • Instance type: Select the desired target instance family and size (for example, moving from c5.large and m5.large to m6i.xlarge).
    • Platform: Select the operating system (such as Linux/UNIX, Red Hat Enterprise Linux, SUSE Linux, or Windows).
    • Tenancy: Choose Default or Dedicated.
    • Payment option: Select All Upfront, Partial Upfront, or No Upfront (subject to the payment compatibility rules).
  6. Choose Find offering (or review the automatically populated target calculation). The console displays the minimum number of instances required in the new instance family to cover the remaining value of your selected reservations, along with any additional upfront true-up cost.
  7. Review the summary table comparing your current reservations to the new reservation, and then choose Exchange to submit the request.

Exchanging Multiple Reservations via the AWS CLI

For automated workflows or bulk reservation management, use the AWS Command Line Interface (aws ec2) to find a target offering, request a quote, and execute the exchange.

Step 1: Identify Your Current Reserved Instance IDs

List your active Convertible Reserved Instances to retrieve their ReservedInstancesId values:

aws ec2 describe-reserved-instances \
    --filters "Name=offering-class,Values=convertible" "Name=state,Values=active" \
    --query "ReservedInstances[*].{ID:ReservedInstancesId,Type:InstanceType,Count:InstanceCount,End:End}" \
    --output table

Step 2: Find a Target Offering in the New Instance Family

Query the available Convertible Reserved Instance offerings for your target instance family (for example, m6i.xlarge):

aws ec2 describe-reserved-instances-offerings \
    --offering-class convertible \
    --instance-type m6i.xlarge \
    --product-description "Linux/UNIX" \
    --instance-tenancy default \
    --no-include-marketplace \
    --query "ReservedInstancesOfferings[*].{OfferingId:ReservedInstancesOfferingId,Payment:OfferingType,Duration:Duration}" \
    --output table

Step 3: Preview the Exchange Quote

Before committing to the exchange, run get-reserved-instances-exchange-quote by passing multiple space-separated reservation IDs to --reserved-instance-ids and the target offering ID from the previous step:

aws ec2 get-reserved-instances-exchange-quote \
    --reserved-instance-ids \
        11111111-2222-3333-4444-555555555551 \
        11111111-2222-3333-4444-555555555552 \
    --target-configurations OfferingId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

note that omitting InstanceCount inside --target-configurations instructs AWS to automatically calculate the minimum number of instances of the target offering required to equal or exceed the combined value of the source reservations. Examine the PaymentDue, OutputReservedInstancesWillExpireAt, and TargetConfiguration.InstanceCount fields in the JSON output.

Step 4: Execute the Exchange

Once you verify the quote details, execute the exchange using accept-reserved-instances-exchange-quote:

aws ec2 accept-reserved-instances-exchange-quote \
    --reserved-instance-ids \
        11111111-2222-3333-4444-555555555551 \
        11111111-2222-3333-4444-555555555552 \
    --target-configurations OfferingId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

The command returns an ExchangeId. Your original Convertible Reserved Instances transition to the retired state, and the new Convertible Reserved Instance in the target instance family transitions to payment-pending and then active within a few minutes.

Splitting a Reservation Before Exchanging

When you include a Convertible Reserved Instance in an exchange, all instances within that specific ReservedInstancesId must be exchanged together unless you specify a smaller subset or split the reservation first. If a reservation contains \(10\) instances and you only want to combine \(4\) of them with another reservation into a new instance family, first use the Modify Reserved Instances action (modify-reserved-instances in the AWS CLI) to split the original reservation into two separate reservations of \(6\) and \(4\) instances, and then include only the \(4\)-instance reservation ID in your multi-reservation exchange.