如何通过boto获得当前现货价格?

Shu*_*rma 8 python amazon-ec2 boto

我试图通过使用get_spot_price_history()函数的python中的boto获取当前的现货价格.

conn = boto.connect_ec2(aws_key, aws_secret)
prices = conn.get_spot_price_history("m3.medium", '2017-04-20T21:14:45.000Z', '2017-04-20T21:20:45.000Z',"us-east-1")
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误

Traceback (most recent call last):
  File "run.py", line 22, in <module>
    prices = conn.get_spot_price_history("m3.medium", '2017-04-20T21:14:45.000Z', '2017-04-20T21:20:45.000Z',"us-east-1")
  File "/usr/lib/python2.6/site-packages/boto/ec2/connection.py", line 1421, in get_spot_price_history
    [('item', SpotPriceHistory)], verb='POST')
  File "/usr/lib/python2.6/site-packages/boto/connection.py", line 1182, in get_list
    raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidRequest</Code><Message>The request received was invalid.</Message></Error></Errors><RequestID>da79e2ba-7475-4133-98f3-3c6aab8a07c6</RequestID></Response>
Run Code Online (Sandbox Code Playgroud)

我的目标是获得现货实例的当前价格.任何人都可以告诉我我做错了什么或其他一些简单的方法/功能来获得现货的市场价值.我是亚马逊网络服务的新手.请帮忙.

Joh*_*ein 8

看起来返回的结果是相反的顺序,因此最先返回的价格是先返回的.

使用boto3(这些天推荐):

import boto3

client=boto3.client('ec2',region_name='us-east-1')

prices=client.describe_spot_price_history(InstanceTypes=['m3.medium'],MaxResults=1,ProductDescriptions=['Linux/UNIX (Amazon VPC)'],AvailabilityZone='us-east-1a')

print prices['SpotPriceHistory'][0]
Run Code Online (Sandbox Code Playgroud)

返回:

{u'Timestamp': datetime.datetime(2017, 4, 24, 20, 2, 11, tzinfo=tzlocal()),
u'ProductDescription': 'Linux/UNIX (Amazon VPC)',
u'InstanceType': 'm3.medium',
u'SpotPrice': '0.700000',
u'AvailabilityZone': 'us-east-1a'}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在us-east-1a中启动匹配的现货实例,则不保证这是您支付的价格.这只是该组合的最新报告价格.

  • 按需定价:0.067美元
  • 最新现货价格回报:0.007美元(我认为结果是美分)
  • 竞价实例定价页面显示:$ 0.011