当我检索“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天的结果时,我仍然得到相同数量的结果? 如何获得所有结果或获得最大价格值?
答案 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
返回的值。