Amazon EC2中“预订”的目的是什么?

时间:2013-03-25 15:36:45

标签: amazon-web-services amazon-ec2

我刚开始探索亚马逊ec2。我想听一些解释,或者可能是一些简短的例子,说明你如何以及为什么需要在亚马逊ec2中进行“预订”。我正在使用python框架boto来管理亚马逊服务。到目前为止,我还没有看到任何理由为什么我们为了获取您的实例而有额外的步骤,例如:

reservations = ec2.get_all_instances()
instances = [instance for res in reservations for instance in res.instances]

这就是我获取所有实例的方式,有时我这样做:

reservation = ec2.run_instances(image_id, min_count, max_count, key_name .....)
instance = reservation.instances[0]

而且我使用这些实例来附加卷,添加标签,添加安全组等等......但是boto.ec2.instance.Reservation的目的是什么(我当然不仅仅询问boto框架,当然它的首选,但在亚马逊EC2中的整体意义)

>>> reservation = reservations[0]
>>> reservation
Reservation:r-74d11509
>>> dir(reservation)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'connection', 'endElement', 'groups', 'id', 'instances', 'item', 'owner_id', 'region', 'startElement', 'stop_all']
>>> reservation.__class__
<class 'boto.ec2.instance.Reservation'>

我找不到任何有用的方法。请解释一下我们为什么需要这个?它在那里的原因是什么?在什么情况下你会使用它?

3 个答案:

答案 0 :(得分:36)

根据我的理解,预订是启动实例的行为。基本上,预约是您做的,而实例就是您获取的。如果您通过run_instances()从一个图片启动多个实例,则可以进行一次预订,但会获得多个实例。

run_instancesReservation.stop_all()一起允许您运行一堆实例,等待它们完成任务,然后立即停止它们。

答案 1 :(得分:9)

来自boto docs

  

保留对应于启动实例的命令。你可以看到   什么实例与预订相关联:

>>> instances = reservations[0].instances
>>> instances
[Instance:i-00000000]

答案 2 :(得分:5)

这是一个有趣的主题和评论来自Ryan Parman&amp; Rose Perrone - 我可能会问Mitch关于re的历史:今年晚些时候(2015年)发明,但是如果你做任何正常的aws ec2 describe-instances(或等同于boto,sdks等)你会看到所有实例在某种一般意义上都被列为“保留”:

{
    "Reservations": [
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-9aa12345",
            "Groups": [],
            "Instances": [

在该数据中,ReservationId值为r-12345bc8类型,但这对应于您为锁定较低费率而支付的预订(计费方便,而非实际类型)你旋转的实例)。所以我的预感是,当他们第一次创建系统时,这是一个有趣的小残留 - 每个实例都需要“保留”一个可以运行的插槽。直到后来他们才提出了使用相同术语的定价模型。

但是,这只是猜测。

在这里,这个词的两个含义显然是重叠的,似乎并不相互关联。