Ruby:如何估算每小时的ec2成本?

时间:2019-02-07 00:23:48

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

我希望能够使用Aws::Pricing::Client或ruby aws-sdk gem内的其他模块来估算aws帐户中特定ec2实例的每小时成本。

但是,我确实发现该文档有些混乱,可以使用一些帮助找到有关如何使用此模块的良好示例。例如,如何使用m3.mediumus-east-1 50 gb卷在gp2中找到大小为ListBoxChoice的ec2实例的成本?

更好的方法是,我可以使用一种方法为某些aws-sdk模块提供实例ID或名称,并获得该实例每小时成本的估算值?

1 个答案:

答案 0 :(得分:0)

不幸的是,似乎没有直接的aws-sdk模块可用于访问所有区域的ec2和ebs成本。但是,AWS pricing API似乎是最接近的解决方案,为所有aws地区的两种资源提供成本。

有关此api的更多详细信息,请参见以下帖子:get ec2 pricing programmatically?

api生成jsonp文件。为了使它在ruby中易于访问,我建议您看一下这篇直接使用定价API示例的帖子:Ruby : How to parse a jsonp and save json data to database

一般警告,您需要对此进行大量分析才能访问任何信息。例如,此解决方案将提供一个哈希,其中包含t2.medium

us-west-2实例的定价数据
#!/usr/bin/env ruby

require 'net/http'
require 'json'

ec2_linux_price = JSON.parse(
  Net::HTTP.get(
    URI.parse('http://a0.awsstatic.com/pricing/1/ec2/linux-od.min.js')
  ).split('callback(')[1].sub(');', '').gsub(/(\w+):/, '"\1":')
)

region_prices = ec2_linux_price["config"]["regions"].select{|region| 
  region["region"]=="us-west-2"
}[0]["instanceTypes"].map{|types| 
  types["sizes"]
}

cost_hash={}
region_prices.each do |size_range| 
  cost = size_range.select{|size| 
    size["size"]==instance[:instance_type]
  }[0]
  unless cost.nil?
    cost_hash["t2.medium"] = cost["valueColumns"][0]["prices"]["USD"]
  end
end

p cost_hash