在检查未使用的保留实例时,我从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
进行检查时,我会得到不同的结果?哪一个是对的?
实际上它是通过比较运行和保留实例部分来检出未使用的实例。
此外,现货实例是什么意思,为什么我们也必须忽略现货实例?
答案 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,它可以提供您所寻求的信息: