Hana90
Hana90

Reputation: 925

Can't get max result of spot price history - US-EAST region

When I retrieve the history price of spot for "us-east-f1" or any region in "us-east-1", the result always less than 200 price, I need for single region and single instance type. How can I retrieve a huge number of results? EX:

ec2 = boto3.client('ec2')
t=datetime.datetime.now() - datetime.timedelta(0)
f=datetime.datetime.now() - datetime.timedelta(90)
response= ec2.describe_spot_price_history(InstanceTypes =['c3.4xlarge'],ProductDescriptions = ['Linux/UNIX'], AvailabilityZone = 'us-east-1a', StartTime= f, EndTime = t, MaxResults=1000)
response =response['SpotPriceHistory']

I mean for a single region and instance type, I need the max result to be larger than this.

Edit:

I use paginator to get all result for all available pages:

paginator = ec2.get_paginator('describe_spot_price_history') 
page_iterator = paginator.paginate(StartTime= t, EndTime = f, MaxResults=2000 ) 
for page in page_iterator: 
   output = page['SpotPriceHistory'] 

However, I still get the same number of results! When I fetch the results of 90 days, I still got have the same amount of results? How to get all results or to get the max amount of price values?

Upvotes: 0

Views: 216

Answers (2)

John Rotenstein
John Rotenstein

Reputation: 269370

Your code appears to be working just fine, but the start and end timestamps were backwards.

I ran this code:

import boto3
import datetime

start_date = datetime.datetime.now() - datetime.timedelta(90)
end_date = datetime.datetime.now() - datetime.timedelta(0)

ec2 = boto3.client('ec2', region_name='us-east-1')
paginator = ec2.get_paginator('describe_spot_price_history') 
page_iterator = paginator.paginate(InstanceTypes =['c3.4xlarge'],ProductDescriptions = ['Linux/UNIX'], AvailabilityZone = 'us-east-1a', StartTime= start_date, EndTime = end_date, MaxResults=2000 ) 

for page in page_iterator: 
   print page['SpotPriceHistory'] 

I got back one page that had 122 entries.

The first entry was for 2018-04-01:

{u'Timestamp': datetime.datetime(2018,
    4,
    1,
    4,
    40,
    44, tzinfo=tzutc()), u'AvailabilityZone': 'us-east-1a', u'InstanceType': 'c3.4xlarge', u'ProductDescription': 'Linux/UNIX', u'SpotPrice': '0.840000'
},

The last entry was for 2018-01-02:

{u'Timestamp': datetime.datetime(2018,
    1,
    2,
    0,
    28,
    35, tzinfo=tzutc()), u'AvailabilityZone': 'us-east-1a', u'InstanceType': 'c3.4xlarge', u'ProductDescription': 'Linux/UNIX', u'SpotPrice': '0.840000'
}

This cover the maximum 90 days of data that is available.

Upvotes: 2

John Rotenstein
John Rotenstein

Reputation: 269370

To make an API call to another region, specify the region_name:

ec2 = boto3.client('ec2', region_name='ap-southeast-2')

When MaxResults is exceeded, obtain the next set of results by making the same call, but set NextToken to the value returned by NextToken in the previous result set.

Upvotes: 1

Related Questions