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