如何查询指定时间段内Spot Instances的实例总数量
统计特定时间段Spot Instance总数的实现方法
你可以基于现有get_cost_and_usage接口的调用逻辑调整参数实现,先注意你现有代码存在一个bug:Filter字典里写了两个重复的Dimensions键,后面的REGION过滤条件会直接覆盖前面的PURCHASE_TYPE过滤,实际不会生效,需要先修正这个问题。
场景1:统计时间段内Spot实例的运行总数量(按使用量折算)
如果是要统计类似整月的Spot实例运行总时长折算的实例数,直接调整get_cost_and_usage的参数即可:
- 把Metrics参数替换为
['UsageQuantity'],这个指标会返回对应资源的使用量统计 - 用
And运算符包裹多个过滤维度,避免重复键覆盖的问题 - 按需调整时间粒度,统计整月数据可以把Granularity设为
MONTHLY减少返回结果量
修改后的代码示例:
data = self.ce_client.get_cost_and_usage( TimePeriod={'Start': start, 'End': end}, Granularity='MONTHLY', # 统计整月可以用月度粒度,按天统计保留DAILY即可 Metrics=['UsageQuantity'], Filter={ 'And': [ { 'Dimensions': { 'Key': 'PURCHASE_TYPE', 'Values': [ 'Spot Instances', ], 'MatchOptions': [ 'EQUALS', ] } }, { 'Dimensions': { 'Key': 'REGION', 'Values': args.region, 'MatchOptions': [ 'EQUALS', ] } } ] }, GroupBy=[ { 'Type': 'DIMENSION', 'Key': 'PURCHASE_TYPE' }, ], **kwargs )
返回结果中,PURCHASE_TYPE为Spot Instances对应的UsageQuantity数值就是该时间段内的Spot实例总运行时长,除以你统计的时间段总小时数,就能得到该时间段内的平均运行实例数。
场景2:统计时间段内所有创建过的Spot实例去重总数
如果是要统计期间所有存在过的Spot实例(不管运行时长,只要在时间段内启动过/运行过就算),需要调用EC2的describe_instances接口实现:
- 过滤
InstanceLifecycle为spot的实例 - 添加时间过滤条件,筛选实例启动时间在你指定的时间段范围内,或者终止时间(如果实例已终止)在时间段范围内
- 最后对返回的实例ID去重计数即可
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

