亚马逊EC2中的“预留实例”有什么作用?

45

我刚开始探索亚马逊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框架的,当然它是首选,而是关于Amazon 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'>

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


1
你也可以尝试使用 help(reservation) - cyroxx
@cyroxx感谢您指向了我非常有用的命令,但我仍然没有看到我的问题的答案。 - Vor
3个回答

43

据我所知,Reservation(预留)是启动实例的一个行为。基本上,Reservation是你执行的操作,而Instance是你获取的内容。如果通过run_instances()从一个镜像中启动多个实例,则会创建一个Reservation,但获得多个实例。

run_instancesReservation.stop_all()一起使用,可以运行一堆实例,等待它们完成任务,然后一次性停止所有实例。


1
这是不正确的答案。保留实例与按需实例类似于允许您支付每年20美元与每月8美元的公司。预订实例意味着您已锁定价格,但需要提前支付费用以确保该价格。按需是即时的。 - Ryan Parman
19
看了一下你的个人资料,我猜你知道自己在说什么,但是...你确定你没有混淆"保留实例"和ReservationInfoType API响应,也就是boto.ec2.instance.Reservation吗? - georg
好的观点;我可能是。由于Mitch(boto的作者)在AWS工作,我会在官方论坛上询问。如果不行,您可以在GitHub上提交问题。另一方面,如果我犯了@thg435所说的错误,那么他很可能是正确的。我的错。:o - Ryan Parman
1
有人曾经在 GH 上提过关于 boto.ec2.instance.Reservation 文档的问题吗?它似乎可以说明一些比“_表示预订响应对象_”更有用的内容。编辑,有这个问题,但已关闭:https://github.com/boto/boto/issues/3217 - blong
在使用EC2控制台时,我收到的响应表明所有手动启动的实例共享一个预留实例,即使它们是在不同的时间、使用不同的硬件等条件下启动的。 - AngelGabriel
增加了一份文档请求:https://github.com/boto/boto/issues/3948 - AngelGabriel

10

来自Boto文档

一个预订对应着启动实例的命令。您可以查看与预订关联的实例:

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

6

这是一个有趣的主题,来自Ryan ParmanRose Perrone的评论 - 我可能会在今年晚些时候(2015年)向Mitch询问关于re:Invent的历史,但如果您进行任何正常的aws ec2 describe-instances(或等效的boto、sdks等),您将看到所有实例以某种通用方式枚举为“保留”:

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

在这些数据中,有一个值为r-12345bc8ReservationId,但是这并不对应于您用来锁定更低价格的预订(一种计费便利,而不是实际类型的实例)。因此,我的猜测是这是当他们第一次创建系统时留下的一个有趣的小残留物——每个实例都需要“保留”一个运行的插槽。只有后来他们才提出了使用相同术语的定价模型。
但再说一遍,这只是一个猜测。
看起来这里有两个词的含义明显重叠,它们似乎没有任何关系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接