ruby - Ruby:如何估算每小时的 ec2 成本?
问题描述
我希望能够使用Aws::Pricing::Client或 ruby aws-sdk gem 中的其他模块来估计我的 aws 帐户中特定 ec2 实例的每小时成本。
但是,我确实发现文档有点混乱,并且可以使用一些帮助来找到如何使用这个模块的好例子。例如,我如何能够使用它来查找大小为m3.medium
、 in us-east-1
、50 gb
gp2
卷的 ec2 实例的成本?
更好的是,是否有一种方法可以让我为某些 aws-sdk 模块提供实例 ID 或名称并接收该实例每小时成本的估计值?
解决方案
不幸的是,似乎没有aws-sdk
可用于访问所有区域的 ec2 和 ebs 成本的直接模块。但是, AWS 定价 API似乎是最接近所有 AWS 区域的两种资源成本的解决方案。
可以在这篇文章中找到有关此 API 的更多详细信息:以编程方式获取 ec2 定价?
该 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
推荐阅读
- android - 如何固定要拖动的视图的起始位置
- c - C中的递归后序遍历和sprintf
- angular - Angular 6 - 获取 FormGroup 上的所有更改值
- php - PHP正则表达式找到第一个youtube链接
- reactjs - 渲染路由条件渲染。反应路由器(哈希路由器)
- android - 如何通过xml将一组动画放在2个按钮上?
- git - 如何从 `git log --all --format="%aN <%ae>` 输出中删除我的私人电子邮件?
- mysql - 为什么我不能使用这个参数?
- rest - Yii2 未找到嵌套休息规则
- python - 将函数名存储在字典中并返回带参数的函数名