无法获得现货价格历史的最大结果 - 美国东部地区

时间:2018-03-21 07:20:33

标签: python amazon-ec2 boto boto3

当我检索“us-east-f1”或“us-east-1”中的任何区域的现货历史价格时,结果总是低于200的价格,我需要单区域和单实例类型。 如何检索大量结果? 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']

我的意思是单个区域和实例类型,我需要最大结果大于此。

修改:

我使用paginator获取所有可用页面的所有结果:

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'] 

然而,我仍然得到相同数量的结果!当我获取90天的结果时,我仍然得到相同数量的结果? 如何获得所有结果或获得最大价格值?

2 个答案:

答案 0 :(得分:2)

您的代码似乎工作得很好,但开始和结束时间戳都是倒退的。

我运行了这段代码:

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'] 

我找回了一个有122个条目的页面。

第一个条目是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'
},

最后一项是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'
}

这涵盖了可用的最多90天数据。

答案 1 :(得分:1)

要对其他区域进行API调用,请指定region_name

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

超过MaxResults时,通过拨打同一个电话获取下一组结果,但将NextToken设置为前一个结果集中NextToken返回的值。