未使用的AWS预留实例中的问题

时间:2016-10-08 17:58:56

标签: amazon-web-services amazon-ec2 aws-sdk

在检查未使用的保留实例时,我从Github使用名为ec2-check-reserved-instances的python脚本检索那些实例。它包含:

            running_instances = {}
            for reservation in reservations:
            for instance in reservation.instances:
            if instance.state != "running":
                  sys.stderr.write("Disqualifying instance %s: not running\n" % ( instance.id ) )
            elif instance.spot_instance_request_id:
                sys.stderr.write("Disqualifying instance %s: spot\n" % ( instance.id ) )
            else:
                 **if instance.vpc_id:**
                       print "Does not support vpc yet, please be careful when trusting these results"
                else:
                      az = instance.placement
                      instance_type = instance.instance_type
                      running_instances[ (instance_type, az ) ] = running_instances.get( (instance_type, az ) , 0 ) + 1


   # pprint( running_instances )

它允许我将实例作为空运行而非保留实例也为空,但是打印未使用的保留实例。

当我使用相同的代码而不检查if instance.vpc_id时,如下所示:

            running_instances = {}
            for reservation in reservations:
            for instance in reservation.instances:
            if instance.state != "running":
                sys.stderr.write("Disqualifying instance %s: not running\n" % ( instance.id ) )
            elif instance.spot_instance_request_id:
                   sys.stderr.write("Disqualifying instance %s: spot\n" % ( instance.id ) )
            else:
                 az = instance.placement
                 instance_type = instance.instance_type
                 running_instances[ (instance_type, az ) ] = running_instances.get( (instance_type, az ) , 0 ) + 1


           # pprint( running_instances )

它为我提供了一个Running实例列表,而不是创建的实例。但它没有显示未使用的保留实例。只显示"您没有未使用的保留实例"。

为什么在使用instance.vpc_id进行检查时,我会得到不同的结果?哪一个是对的?

实际上它是通过比较运行和保留实例部分来检出未使用的实例。

此外,现货实例是什么意思,为什么我们也必须忽略现货实例?

1 个答案:

答案 0 :(得分:0)

我不打算通过代码(这是您选择使用该代码),但我将解释一些可能使事情更容易理解的概念。

Amazon EC2预留实例是预购某些Amazon EC2容量。通过购买预留实例,您有权以无时间成本使用匹配的Amazon EC2实例(因为预留实例按年或按月收费)。

无需提名哪个实例为“保留”。相反,AWS计费系统会查看每小时使用的EC2实例,并将其与购买的预留实例容量进行比较。如果您拥有与所使用的实例匹配的预留实例,则该实例不会按小时收费。匹配由实例类型,操作系统和可选的可用区完成。

如果您拥有一个预留实例但运行两个匹配的EC2实例,该小时只有一个 EC2实例与预留实例匹配。另一个EC2实例按正常按需费率收费。

因此,未使用的预留实例仅表示您已购买预留实例,并且您当前正在运行与预留实例数一样多的EC2实例 。因此,您可以免费运行其他EC2实例(因为它已通过预留实例预付)。

作为竞价型实例启动的Amazon EC2实例拥有自己的定价方法,具体取决于实例的当前竞价价格,具体取决于其实例类型和可用性区域。竞价型实例永远不会消耗预留实例容量,因此应将其排除在“未使用”预留实例的任何计算之外。

同样,在计算未使用的预留实例时,也应忽略未运行的EC2实例。

对于脚本中的instance.vpc_id行,似乎此脚本是在2012年编写的,并且无法正确处理将Amazon EC2实例启动到Amazon VPC的情况。目前,默认情况下使用的是亚马逊VPC,因此我不建议使用此脚本,因为它已过时且无法处理此用例。

相反,我建议使用AWS管理控制台中提供的Reserved Instance Utilization Reports,它可以提供您所寻求的信息:

enter image description here