Ruby: Как оценить стоимость ec2 в час? - PullRequest
0 голосов
/ 07 февраля 2019

Я бы хотел оценить часовую стоимость конкретных экземпляров ec2 в моих учетных записях aws, используя Aws :: Pricing :: Client или другой модуль внутри гема ruby ​​aws-sdk.

Тем не менее, я нахожу документацию немного запутанной и могу использовать некоторую помощь в поиске хорошего примера использования этого модуля.Например, как я мог бы использовать это, чтобы найти стоимость экземпляра ec2 размером m3.medium, в us-east-1, с объемом 50 gb gp2?

Еще лучшеЕсть ли способ, который я мог бы использовать, чтобы дать некоторому модулю aws-sdk идентификатор экземпляра или имя и получить оценку стоимости в час для этого экземпляра?

1 Ответ

0 голосов
/ 08 февраля 2019

К сожалению, похоже, что нет прямого модуля aws-sdk, который можно было бы использовать для доступа к ec2 и сокращения затрат во всех регионах.Однако, похоже, что API ценообразования AWS будет самым близким решением, обеспечивающим затраты на оба ресурса во всех регионах AWS.

Более подробную информацию об API можно найти в этом сообщении: получить цену ec2 программно?

API создает файлы jsonp.Чтобы сделать это легко доступным в ruby, я бы порекомендовал взглянуть на этот пост, в котором используются примеры непосредственно из API ценообразования: Ruby: как анализировать jsonp и сохранять данные json в базу данных

Справедливое предупреждение, вам нужно будет тщательно проанализировать это, чтобы иметь возможность получить доступ к любой информации.Например, это решение предоставит хэш, содержащий данные о ценах для экземпляра 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...