Step 1, find the reservation to modify
$ aws ec2 describe-reserved-instances --filters Name=state,Values=active{
"ReservedInstances": [
{
"ReservedInstancesId": "c416aeaf-fb64-4218-970f-7426f6f32377",
"OfferingType": "No Upfront",
"AvailabilityZone": "eu-west-1c",
"End": "2017-10-21T08:45:55.000Z",
"ProductDescription": "Linux/UNIX",
"Scope": "Availability Zone",
"UsagePrice": 0.0,
"RecurringCharges": [
{
"Amount": 0.01,
"Frequency": "Hourly"
}
],
"OfferingClass": "standard",
"Start": "2016-10-21T08:45:56.708Z",
"State": "active",
"FixedPrice": 0.0,
"CurrencyCode": "USD",
"Duration": 31536000,
"InstanceTenancy": "default",
"InstanceType": "t2.micro",
"InstanceCount": 1
}
]
}
The "Scope" field in the response shows that this reservation is currently specific to an Availability Zone, eu-west-1c in this case.
Step 2, request the modification
$ aws ec2 modify-reserved-instances --reserved-instances-ids c416aeaf-fb64-4218-970f-7426f6f32377 --target-configurations Scope=Region,InstanceCount=1
{
"ReservedInstancesModificationId": "rimod-aaada6ed-fec9-47c7-92e2-6edf7e61f2ce"
}
The Scope=Region indicates that this reservation should be converted to a regional reservation, InstanceCount is a required parameter to indicate the number of reservations the modification should be applied to.
Step 3, monitor progress
$ aws ec2 describe-reserved-instances-modifications
{
"ReservedInstancesModifications": [
{
"Status": "processing",
"ModificationResults": [
{
"ReservedInstancesId": "35f9b908-ae36-41ca-ac0b-4c67c887135b",
"TargetConfiguration": {
"InstanceCount": 1
}
}
],
"EffectiveDate": "2016-10-21T08:45:57.000Z",
"CreateDate": "2016-10-21T08:50:28.585Z",
"UpdateDate": "2016-10-21T08:50:31.098Z",
"ReservedInstancesModificationId": "rimod-aaada6ed-fec9-47c7-92e2-6edf7e61f2ce",
"ReservedInstancesIds": [
{
"ReservedInstancesId": "c416aeaf-fb64-4218-970f-7426f6f32377"
}
]
}
]
}
The "Status" in the response will show "processing" until the modification has completed successfully, at which time it will change to "fulfilled":
$ aws ec2 describe-reserved-instances-modifications
{
"ReservedInstancesModifications": [
{
"Status": "fulfilled",
"ModificationResults": [
{
"ReservedInstancesId": "35f9b908-ae36-41ca-ac0b-4c67c887135b",
"TargetConfiguration": {
"InstanceCount": 1
}
}
],
"EffectiveDate": "2016-10-21T08:45:57.000Z",
"CreateDate": "2016-10-21T08:50:28.585Z",
"UpdateDate": "2016-10-21T09:11:33.454Z",
"ReservedInstancesModificationId": "rimod-aaada6ed-fec9-47c7-92e2-6edf7e61f2ce",
"ReservedInstancesIds": [
{
"ReservedInstancesId": "c416aeaf-fb64-4218-970f-7426f6f32377"
}
]
}
]
}
Step 4, success!
The new reservation is now regional (Scope=Region):
$ aws ec2 describe-reserved-instances --filters Name=state,Values=active
{
"ReservedInstances": [
{
"ReservedInstancesId": "35f9b908-ae36-41ca-ac0b-4c67c887135b",
"OfferingType": "No Upfront",
"FixedPrice": 0.0,
"End": "2017-10-21T08:45:55.000Z",
"ProductDescription": "Linux/UNIX",
"Scope": "Region",
"UsagePrice": 0.0,
"RecurringCharges": [
{
"Amount": 0.01,
"Frequency": "Hourly"
}
],
"OfferingClass": "standard",
"Start": "2016-10-21T08:45:57.000Z",
"State": "active",
"InstanceCount": 1,
"CurrencyCode": "USD",
"Duration": 31536000,
"InstanceTenancy": "default",
"InstanceType": "t2.micro"
}
]
}
Switching back
Follows the same process with the added requirement of specifying which AZ the reservation should be linked to:
$ aws ec2 modify-reserved-instances --reserved-instances-ids 35f9b908-ae36-41ca-ac0b-4c67c887135b --target-configurations Scope="Availability Zone",InstanceCount=1,AvailabilityZone=eu-west-1b
{
"ReservedInstancesModificationId": "rimod-9e490be9-55a3-48cf-81e9-2662b13db2f8"
}
$ aws ec2 describe-reserved-instances --filters Name=state,Values=active
{
"ReservedInstances": [
{
"ReservedInstancesId": "df70d097-2f33-4962-bca6-37af15ca819e",
"OfferingType": "No Upfront",
"AvailabilityZone": "eu-west-1b",
"End": "2017-10-21T08:45:55.000Z",
"ProductDescription": "Linux/UNIX",
"Scope": "Availability Zone",
"UsagePrice": 0.0,
"RecurringCharges": [
{
"Amount": 0.01,
"Frequency": "Hourly"
}
],
"OfferingClass": "standard",
"Start": "2016-10-21T08:45:58.000Z",
"State": "active",
"FixedPrice": 0.0,
"CurrencyCode": "USD",
"Duration": 31536000,
"InstanceTenancy": "default",
"InstanceType": "t2.micro",
"InstanceCount": 1
}
]
}