Last active
September 17, 2019 04:14
-
-
Save shinsaka/e4e90a5db60d0f94443f to your computer and use it in GitHub Desktop.
AWS RDS RI pricing parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'json' | |
def parse(uri) | |
JSON.parse `curl -s #{uri}`.gsub(/\/\*(?:(?!\*\/).)*\*\//m, '').strip.gsub(/^callback\(/, '').gsub(/\);/, '').gsub(/([a-zA-Z]+[0-9]*):/, '"\1":') | |
end | |
puts %w( | |
platform | |
region | |
type | |
term | |
purchase_option | |
savingsOverOD | |
upfront | |
monthlyStar | |
effectiveHourly | |
onDemandHourlyPrice | |
).join("\t") | |
sources = { | |
# "aurora.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/aurora-multiAZ.min.js", | |
"aurora.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/aurora-standard.min.js", | |
"mariadb.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/mariadb-multiAZ.min.js", | |
"mariadb.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/mariadb-standard.min.js", | |
"mysql.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/mysql-multiAZ.min.js", | |
"mysql.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/mysql-multiAZ.min.js", | |
"mysql.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/mysql-standard.min.js", | |
"mysql.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/mysql-standard.min.js", | |
"oracle-se1-li.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se1-license-included-multiAZ.min.js", | |
"oracle-se1-li.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/oracle-se1-license-included-multiAZ.min.js", | |
"oracle-se1-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se1-license-included-standard.min.js", | |
"oracle-se1-li.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/oracle-se1-license-included-standard.min.js", | |
"oracle-se1-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se1-byol-multiAZ.min.js", | |
"oracle-se1-byol.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/oracle-se1-byol-multiAZ.min.js", | |
"oracle-se1-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se1-byol-standard.min.js", | |
"oracle-se1-byol.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/oracle-se1-byol-standard.min.js", | |
"oracle-se2-li.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se2-license-included-multiAZ.min.js", | |
"oracle-se2-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se2-license-included-standard.min.js", | |
"oracle-se2-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se2-byol-multiAZ.min.js", | |
"oracle-se2-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se2-byol-standard.min.js", | |
"oracle-se-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se-byol-multiAZ.min.js", | |
"oracle-se-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-se-byol-standard.min.js", | |
"oracle-ee-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-ee-byol-multiAZ.min.js", | |
"oracle-ee-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/oracle-ee-byol-standard.min.js", | |
"postgresql.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/postgresql-multiAZ.min.js", | |
"postgresql.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/postgresql-multiAZ.min.js", | |
"postgresql.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/postgresql-standard.min.js", | |
"postgresql.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/postgresql-standard.min.js", | |
"sql-server-ee-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-ee-byol-multiAZ.min.js", | |
"sql-server-ee-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-ee-byol-standard.min.js", | |
"sql-server-ee-li.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-ee-license-included-multiAZ.min.js", | |
"sql-server-ee-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-ee-license-included-standard.min.js", | |
"sql-server-se-li.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-se-license-included-multiAZ.min.js", | |
"sql-server-se-li.multi.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/sql-server-se-license-included-multiAZ.min.js", | |
"sql-server-se-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-se-license-included-standard.min.js", | |
"sql-server-se-li.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/sql-server-se-license-included-standard.min.js", | |
"sql-server-se-byol.multi" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-se-byol-multiAZ.min.js", | |
"sql-server-se-byol.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-se-byol-standard.min.js", | |
"sql-server-web-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-web-license-included-standard.min.js", | |
"sql-server-web-li.single.1" => "https://a0.awsstatic.com/pricing/1/rds/previous-generation/reserved-instances/sql-server-web-license-included-standard.min.js", | |
"sql-server-ex-li.single" => "https://a0.awsstatic.com/pricing/1/rds/reserved-instances/sql-server-express-license-included-standard.min.js", | |
} | |
sources.each do |platform, uri| | |
table = parse(uri) | |
table['config']['regions'].each do |region_table| | |
current_region = region_table["region"] | |
region_table["instanceTypes"].each do |type_group| | |
current_type = type_group['type'] | |
type_group["terms"].each do |type_table| | |
on_demand_price = "" | |
type_table["onDemandHourly"].each do |on_demand| | |
on_demand_price = on_demand["prices"]["USD"] | |
end | |
current_term = type_table["term"] | |
type_table['purchaseOptions'].each do |options| | |
purchase_option = options['purchaseOption'] | |
savings_over_od = options['savingsOverOD'] | |
upfront = options['valueColumns'].find{|x| x["name"] == "upfront"}["prices"]["USD"] | |
monthly_star = options['valueColumns'].find{|x| x["name"] == "monthlyStar"}["prices"]["USD"] | |
effectiveHourly = options['valueColumns'].find{|x| x["name"] == "effectiveHourly"}["prices"]["USD"] | |
puts [platform.gsub(/\.\d+$/, ""), current_region, current_type, current_term, purchase_option, savings_over_od, upfront, monthly_star, effectiveHourly, on_demand_price].join("\t") | |
end | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment