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

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

4

3 回答 3

40

据我了解,预留是启动实例的行为。基本上,预订就是你所做的,而实例就是你得到的。如果您通过run_instances()进行一项预订从一张图像启动多个实例,但获得多个实例。

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

于 2013-03-25T15:59:59.637 回答
10

boto 文档

预留对应于启动实例的命令。您可以查看哪些实例与预留相关联:

>>> instances = reservations[0].instances
>>> instances
[Instance:i-00000000]
于 2013-08-31T03:19:02.200 回答
6

这是Ryan ParmanRose Perrone的一个有趣的主题和评论——我可能会在今年晚些时候(2015 年)向 Mitch 询问 re:Invent 的历史,但如果你做任何正常的事情aws ec2 describe-instances(或来自 boto、sdks、等)你会看到所有实例都被枚举为某种一般意义上的“保留”:

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

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

但同样,这只是一个猜测。

在这里,这个词的两个含义显然有重叠,似乎彼此没有关联。

于 2015-05-18T16:43:01.443 回答