awscosts 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +16 -0
- data/lib/awscosts.rb +1 -0
- data/lib/awscosts/region.rb +4 -0
- data/lib/awscosts/s3.rb +27 -0
- data/lib/awscosts/s3_data_transfer.rb +37 -0
- data/lib/awscosts/s3_requests.rb +34 -0
- data/lib/awscosts/s3_storage.rb +38 -0
- data/lib/awscosts/version.rb +1 -1
- metadata +8 -4
data/README.md
CHANGED
@@ -58,6 +58,21 @@ To find the on demand EC2 price and Elastic MapReduce price for the Oregon regio
|
|
58
58
|
AWSCosts.region('us-west-2').emr.ec2_price('cc2.8xlarge')
|
59
59
|
AWSCosts.region('us-west-2').emr.emr_price('cc2.8xlarge')
|
60
60
|
|
61
|
+
### S3
|
62
|
+
|
63
|
+
To find the First 1 TB / month price in the Singapore region which includes the Standard
|
64
|
+
Storage, Reduced Redundancy Storage, and the Glacier Storage
|
65
|
+
|
66
|
+
AWSCosts.region('ap-southeast-1').s3.storage.price('firstTBstorage')
|
67
|
+
|
68
|
+
Pricing is also available for data transfer
|
69
|
+
|
70
|
+
region.s3.data_transfer.price
|
71
|
+
|
72
|
+
And request pricing
|
73
|
+
|
74
|
+
region.s3.request.price
|
75
|
+
|
61
76
|
## Supported Services
|
62
77
|
|
63
78
|
The following AWS services are currently support (more to come):
|
@@ -68,6 +83,7 @@ The following AWS services are currently support (more to come):
|
|
68
83
|
* Reserved heavy utilisation
|
69
84
|
* Elastic Load Balancer (ELB)
|
70
85
|
* Elastic MapReduce (EMR)
|
86
|
+
* S3
|
71
87
|
|
72
88
|
EC2 platforms:
|
73
89
|
|
data/lib/awscosts.rb
CHANGED
data/lib/awscosts/region.rb
CHANGED
data/lib/awscosts/s3.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'awscosts/s3_storage'
|
2
|
+
require 'awscosts/s3_requests'
|
3
|
+
require 'awscosts/s3_data_transfer'
|
4
|
+
|
5
|
+
class AWSCosts::S3
|
6
|
+
|
7
|
+
attr_reader :region
|
8
|
+
|
9
|
+
def initialize region
|
10
|
+
@region = region
|
11
|
+
end
|
12
|
+
|
13
|
+
def storage
|
14
|
+
AWSCosts::S3Storage.fetch(self.region.price_mapping)
|
15
|
+
end
|
16
|
+
|
17
|
+
def data_transfer
|
18
|
+
AWSCosts::S3DataTransfer.fetch(self.region.price_mapping)
|
19
|
+
end
|
20
|
+
|
21
|
+
def requests
|
22
|
+
AWSCosts::S3Requests.fetch(self.region.price_mapping)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class AWSCosts::S3DataTransfer
|
5
|
+
|
6
|
+
TYPES = %w{dataXferInS3, dataXferOutS3CrossRegion, dataXferOutS3}
|
7
|
+
|
8
|
+
def initialize data
|
9
|
+
@data= data
|
10
|
+
end
|
11
|
+
|
12
|
+
def price type = nil
|
13
|
+
type.nil? ? @data : @data[type.to_s]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.fetch region
|
17
|
+
@cache ||= begin
|
18
|
+
result = {}
|
19
|
+
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-data-transfer.json").body)
|
20
|
+
data['config']['regions'].each do |region|
|
21
|
+
types = {}
|
22
|
+
region['types'].each do |type|
|
23
|
+
types[type['name']] = {}
|
24
|
+
type['tiers'].each do |tier|
|
25
|
+
types[type['name']][tier['name']] = tier['prices']['USD'].to_f
|
26
|
+
end
|
27
|
+
end
|
28
|
+
result[region['region']] = types
|
29
|
+
end
|
30
|
+
result
|
31
|
+
end
|
32
|
+
self.new(@cache[region])
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class AWSCosts::S3Requests
|
5
|
+
|
6
|
+
TIERS = %w{putcopypost, glacierRequests, deleteRequests, getEtc, glacierDataRestore}
|
7
|
+
|
8
|
+
def initialize data
|
9
|
+
@data= data
|
10
|
+
end
|
11
|
+
|
12
|
+
def price tier = nil
|
13
|
+
tier.nil? ? @data : @data[tier.to_s]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.fetch region
|
17
|
+
@cache ||= begin
|
18
|
+
result = {}
|
19
|
+
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-requests.json").body)
|
20
|
+
data['config']['regions'].each do |region|
|
21
|
+
tiers = {}
|
22
|
+
region['tiers'].each do |tier|
|
23
|
+
tiers[tier['name']] = { rate: tier['rate'], price: tier['prices']['USD'].to_f}
|
24
|
+
end
|
25
|
+
result[region['region']] = tiers
|
26
|
+
end
|
27
|
+
result
|
28
|
+
end
|
29
|
+
self.new(@cache[region])
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class AWSCosts::S3Storage
|
5
|
+
|
6
|
+
TIERS = %w{firstTBstorage, next49TBstorage, next49TBstorage, next501TBstorage}
|
7
|
+
|
8
|
+
def initialize data
|
9
|
+
@data= data
|
10
|
+
end
|
11
|
+
|
12
|
+
def price tier = nil
|
13
|
+
tier.nil? ? @data : @data[tier.to_s]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.fetch region
|
17
|
+
@cache ||= begin
|
18
|
+
result = {}
|
19
|
+
data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-storage.json").body)
|
20
|
+
data['config']['regions'].each do |region|
|
21
|
+
tiers = {}
|
22
|
+
region['tiers'].each do |tier|
|
23
|
+
storage_type = {}
|
24
|
+
tiers[tier['name']] = storage_type
|
25
|
+
tier['storageTypes'].each do |type|
|
26
|
+
storage_type[type['type']] = type['prices']['USD'].to_f
|
27
|
+
end
|
28
|
+
end
|
29
|
+
result[region['region']] = tiers
|
30
|
+
end
|
31
|
+
result
|
32
|
+
end
|
33
|
+
self.new(@cache[region])
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
data/lib/awscosts/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awscosts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -96,6 +96,10 @@ files:
|
|
96
96
|
- lib/awscosts/ec2_reserved_instances.rb
|
97
97
|
- lib/awscosts/emr.rb
|
98
98
|
- lib/awscosts/region.rb
|
99
|
+
- lib/awscosts/s3.rb
|
100
|
+
- lib/awscosts/s3_data_transfer.rb
|
101
|
+
- lib/awscosts/s3_requests.rb
|
102
|
+
- lib/awscosts/s3_storage.rb
|
99
103
|
- lib/awscosts/version.rb
|
100
104
|
- spec/awscosts/ec2_spec.rb
|
101
105
|
- spec/awscosts/region_spec.rb
|
@@ -115,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
119
|
version: '0'
|
116
120
|
segments:
|
117
121
|
- 0
|
118
|
-
hash:
|
122
|
+
hash: 1983521738208440787
|
119
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
124
|
none: false
|
121
125
|
requirements:
|
@@ -124,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
128
|
version: '0'
|
125
129
|
segments:
|
126
130
|
- 0
|
127
|
-
hash:
|
131
|
+
hash: 1983521738208440787
|
128
132
|
requirements: []
|
129
133
|
rubyforge_project:
|
130
134
|
rubygems_version: 1.8.23
|