我希望能够使用Aws::Pricing::Client或ruby aws-sdk gem内的其他模块来估算aws帐户中特定ec2实例的每小时成本。
但是,我确实发现该文档有些混乱,可以使用一些帮助找到有关如何使用此模块的良好示例。例如,如何使用m3.medium
和us-east-1
50 gb
卷在gp2
中找到大小为ListBoxChoice
的ec2实例的成本?
更好的方法是,我可以使用一种方法为某些aws-sdk模块提供实例ID或名称,并获得该实例每小时成本的估算值?
答案 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