aws-sdk 1.11.3 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/aws-rb +151 -0
- data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +257 -0
- data/lib/aws/auto_scaling/group.rb +2 -0
- data/lib/aws/auto_scaling/group_options.rb +9 -0
- data/lib/aws/cloud_watch/metric_collection.rb +1 -3
- data/lib/aws/core.rb +107 -166
- data/lib/aws/core/configuration.rb +22 -4
- data/lib/aws/core/http/curb_handler.rb +2 -9
- data/lib/aws/core/http/net_http_handler.rb +15 -15
- data/lib/aws/core/region.rb +11 -7
- data/lib/aws/dynamo_db/client.rb +766 -400
- data/lib/aws/dynamo_db/client_v2.rb +125 -23
- data/lib/aws/elastic_transcoder/client.rb +578 -54
- data/lib/aws/iam/virtual_mfa_device.rb +1 -1
- data/lib/aws/route_53/change_batch.rb +3 -1
- data/lib/aws/route_53/resource_record_set.rb +17 -3
- data/lib/aws/s3/client.rb +10 -5
- data/lib/aws/s3/encryption_utils.rb +8 -1
- data/lib/aws/s3/object_collection.rb +7 -4
- data/lib/aws/simple_email_service.rb +5 -2
- data/lib/aws/sns.rb +1 -0
- data/lib/aws/sns/message.rb +175 -0
- data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
- data/lib/aws/version.rb +1 -1
- metadata +12 -16
@@ -114,7 +114,7 @@ module AWS
|
|
114
114
|
# @return [String]
|
115
115
|
attr_reader :type
|
116
116
|
|
117
|
-
# Build query
|
117
|
+
# Build query for change request.
|
118
118
|
# @return [Hash]
|
119
119
|
def to_hash
|
120
120
|
q = {}
|
@@ -128,6 +128,8 @@ module AWS
|
|
128
128
|
q[:resource_record_set][:ttl] = @change_options[:ttl] if @change_options[:ttl]
|
129
129
|
q[:resource_record_set][:resource_records] = @change_options[:resource_records] if @change_options[:resource_records]
|
130
130
|
q[:resource_record_set][:alias_target] = @change_options[:alias_target] if @change_options[:alias_target]
|
131
|
+
q[:resource_record_set][:failover] = @change_options[:failover] if @change_options[:failover]
|
132
|
+
q[:resource_record_set][:health_check_id] = @change_options[:health_check_id] if @change_options[:health_check_id]
|
131
133
|
q
|
132
134
|
end
|
133
135
|
end
|
@@ -119,6 +119,18 @@ module AWS
|
|
119
119
|
@create_options[:ttl] = new_ttl
|
120
120
|
end
|
121
121
|
|
122
|
+
attribute :failover
|
123
|
+
|
124
|
+
def failover= new_failover
|
125
|
+
@create_options[:failover] = new_failover
|
126
|
+
end
|
127
|
+
|
128
|
+
attribute :health_check_id
|
129
|
+
|
130
|
+
def health_check_id= new_health_check_id
|
131
|
+
@create_options[:health_check_id] = new_health_check_id
|
132
|
+
end
|
133
|
+
|
122
134
|
attribute :resource_records
|
123
135
|
|
124
136
|
# @param [Array<Hash>] new_rrs
|
@@ -159,9 +171,9 @@ module AWS
|
|
159
171
|
end
|
160
172
|
|
161
173
|
@change_info = batch.call()
|
162
|
-
@name = @create_options[:name]
|
163
|
-
@type = @create_options[:type]
|
164
|
-
@set_identifier = @create_options[:set_identifier]
|
174
|
+
@name = @create_options[:name] || @name
|
175
|
+
@type = @create_options[:type] || @type
|
176
|
+
@set_identifier = @create_options[:set_identifier] || @set_identifier
|
165
177
|
@create_options = {}
|
166
178
|
self
|
167
179
|
end
|
@@ -229,6 +241,8 @@ module AWS
|
|
229
241
|
options[:region] = region if region
|
230
242
|
options[:ttl] = ttl if ttl
|
231
243
|
options[:resource_records] = resource_records if resource_records && !resource_records.empty?
|
244
|
+
options[:failover] = failover if failover
|
245
|
+
options[:health_check_id] = health_check_id if health_check_id
|
232
246
|
end
|
233
247
|
options
|
234
248
|
end
|
data/lib/aws/s3/client.rb
CHANGED
@@ -1403,11 +1403,16 @@ module AWS
|
|
1403
1403
|
|
1404
1404
|
def retryable_error? response
|
1405
1405
|
super or
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1406
|
+
failed_multipart_upload?(response) or
|
1407
|
+
response.error.is_a?(Errors::RequestTimeout)
|
1408
|
+
end
|
1409
|
+
|
1410
|
+
# S3 may return a 200 response code in response to complete_multipart_upload
|
1411
|
+
# and then start streaming whitespace until it knows the final result.
|
1412
|
+
# At that time it sends an XML message with success or failure.
|
1413
|
+
def failed_multipart_upload? response
|
1414
|
+
response.request_type == :complete_multipart_upload &&
|
1415
|
+
extract_error_details(response)
|
1411
1416
|
end
|
1412
1417
|
|
1413
1418
|
def new_request
|
@@ -20,22 +20,29 @@ module AWS
|
|
20
20
|
|
21
21
|
protected
|
22
22
|
|
23
|
+
UNSAFE_MSG = "Unsafe encryption, data is longer than key length"
|
23
24
|
|
24
25
|
# @param [OpenSSL::PKey::RSA, String] key Key used to encrypt.
|
25
26
|
#
|
26
27
|
# @param [String] data Data to be encrypted.
|
27
28
|
#
|
28
29
|
# @note Use check_encryption_materials before this method to check
|
29
|
-
# formatting of keys
|
30
|
+
# formatting of keys.
|
31
|
+
# @note This should not be used for data longer than the key length as
|
32
|
+
# it will not be cryptographically safe.
|
30
33
|
#
|
31
34
|
# @return [String] Returns the data encrypted with the key given.
|
32
35
|
def encrypt data, key
|
33
36
|
rsa = OpenSSL::PKey::RSA
|
37
|
+
data_cipher_size = get_cipher_size(data.length)
|
38
|
+
|
34
39
|
# Encrypting data key
|
35
40
|
case key
|
36
41
|
when rsa # Asymmetric encryption
|
42
|
+
warn UNSAFE_MSG if key.public_key.n.num_bits < data_cipher_size
|
37
43
|
key.public_encrypt(data)
|
38
44
|
when String # Symmetric encryption
|
45
|
+
warn UNSAFE_MSG if get_cipher_size(key.length) < data_cipher_size
|
39
46
|
cipher = get_aes_cipher(:encrypt, :ECB, key)
|
40
47
|
cipher.update(data) + cipher.final
|
41
48
|
end
|
@@ -306,12 +306,15 @@ module AWS
|
|
306
306
|
# @api private
|
307
307
|
protected
|
308
308
|
def next_markers page
|
309
|
-
|
310
|
-
|
311
|
-
|
309
|
+
if page[:next_marker]
|
310
|
+
marker = page[:next_marker]
|
311
|
+
elsif page[:contents].size > 0
|
312
|
+
marker = page[:contents].last[:key]
|
312
313
|
else
|
313
|
-
|
314
|
+
raise 'Unable to find marker in S3 list objects response'
|
314
315
|
end
|
316
|
+
|
317
|
+
{ :marker => marker }
|
315
318
|
end
|
316
319
|
|
317
320
|
# processes items in batches of 1k items
|
@@ -342,9 +342,12 @@ module AWS
|
|
342
342
|
end
|
343
343
|
send_opts[:destinations] = [options[:to]].flatten if options[:to]
|
344
344
|
|
345
|
-
client.send_raw_email(send_opts)
|
346
|
-
|
345
|
+
response = client.send_raw_email(send_opts)
|
346
|
+
if raw_message.respond_to?(:message_id=)
|
347
|
+
raw_message.message_id = "#{response.data[:message_id]}@email.amazonses.com"
|
348
|
+
end
|
347
349
|
|
350
|
+
nil
|
348
351
|
end
|
349
352
|
|
350
353
|
# for compatability with ActionMailer
|
data/lib/aws/sns.rb
CHANGED
@@ -0,0 +1,175 @@
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
require 'base64'
|
15
|
+
require 'json'
|
16
|
+
require 'net/http'
|
17
|
+
require 'net/https'
|
18
|
+
require 'openssl'
|
19
|
+
Dir.glob("#{File.dirname __FILE__}/originators/*.rb").each { |rb| require rb }
|
20
|
+
|
21
|
+
module AWS
|
22
|
+
class SNS
|
23
|
+
class MessageWasNotAuthenticError < StandardError
|
24
|
+
end
|
25
|
+
|
26
|
+
# Represents a single SNS message.
|
27
|
+
#
|
28
|
+
# See also http://docs.amazonwebservices.com/sns/latest/gsg/json-formats.html
|
29
|
+
#
|
30
|
+
# = Originators
|
31
|
+
# Originators are sources of SNS messages. {FromAutoScaling} is one. {Message}
|
32
|
+
# can be extended by originators if their #applicable? method returns true when
|
33
|
+
# passed the raw message.
|
34
|
+
# Originator modules must implement `applicable? sns` module function.
|
35
|
+
# If an originator is applicable, it should set the `@origin` accessor to denote
|
36
|
+
# itself.
|
37
|
+
class Message
|
38
|
+
attr_reader :raw
|
39
|
+
attr_accessor :origin
|
40
|
+
|
41
|
+
# @return {Message} Constructs a new {Message} from the raw SNS, sets origin
|
42
|
+
def initialize sns
|
43
|
+
if sns.is_a? String
|
44
|
+
@raw = parse_from sns
|
45
|
+
else
|
46
|
+
@raw = sns
|
47
|
+
end
|
48
|
+
@origin = :sns
|
49
|
+
self.extend FromAutoScaling if FromAutoScaling.applicable? @raw
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param [String] indexer into raw SNS JSON message
|
53
|
+
# @return [String] the value of the SNS' field
|
54
|
+
def [] key
|
55
|
+
@raw[key]
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Boolean] true when the {Message} is authentic:
|
59
|
+
# SigningCert is hosted at amazonaws.com, on https
|
60
|
+
# correctly cryptographically signed by sender
|
61
|
+
# nothing went wrong during authenticating the {Message}
|
62
|
+
#
|
63
|
+
# See http://docs.amazonwebservices.com/sns/latest/gsg/SendMessageToHttp.verify.signature.html
|
64
|
+
def authentic?
|
65
|
+
begin
|
66
|
+
decoded_from_base64 = decode signature
|
67
|
+
public_key = get_public_key_from signing_cert_url
|
68
|
+
public_key.verify OpenSSL::Digest::SHA1.new, decoded_from_base64, canonical_string
|
69
|
+
rescue MessageWasNotAuthenticError
|
70
|
+
false
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return[Symbol] the message type
|
75
|
+
def type
|
76
|
+
case when @raw['Type'] =~ /SubscriptionConfirmation/i
|
77
|
+
then :SubscriptionConfirmation
|
78
|
+
when @raw['Type'] =~ /Notification/i
|
79
|
+
then :Notification
|
80
|
+
when @raw['Type'] =~ /UnsubscribeConfirmation/i
|
81
|
+
then :UnsubscribeConfirmation
|
82
|
+
else
|
83
|
+
:unknown
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def message_id
|
88
|
+
@raw['MessageId']
|
89
|
+
end
|
90
|
+
|
91
|
+
def topic_arn
|
92
|
+
@raw['TopicArn']
|
93
|
+
end
|
94
|
+
|
95
|
+
def subject
|
96
|
+
@raw['Subject']
|
97
|
+
end
|
98
|
+
|
99
|
+
def message
|
100
|
+
@raw['Message']
|
101
|
+
end
|
102
|
+
|
103
|
+
def timestamp
|
104
|
+
@raw['Timestamp']
|
105
|
+
end
|
106
|
+
|
107
|
+
def signature
|
108
|
+
@raw['Signature']
|
109
|
+
end
|
110
|
+
|
111
|
+
def signature_version
|
112
|
+
@raw['SignatureVersion']
|
113
|
+
end
|
114
|
+
|
115
|
+
def signing_cert_url
|
116
|
+
@raw['SigningCertURL']
|
117
|
+
end
|
118
|
+
|
119
|
+
def unsubscribe_url
|
120
|
+
@raw['UnsubscribeURL']
|
121
|
+
end
|
122
|
+
|
123
|
+
def parse_from json
|
124
|
+
JSON.parse json
|
125
|
+
end
|
126
|
+
|
127
|
+
protected
|
128
|
+
def decode raw
|
129
|
+
Base64.decode64 raw
|
130
|
+
end
|
131
|
+
|
132
|
+
def get_public_key_from(x509_pem_url)
|
133
|
+
cert_pem = download x509_pem_url
|
134
|
+
x509 = OpenSSL::X509::Certificate.new(cert_pem)
|
135
|
+
OpenSSL::PKey::RSA.new(x509.public_key)
|
136
|
+
end
|
137
|
+
|
138
|
+
def canonical_string
|
139
|
+
# TODO: Support SubscriptionConfirmation and UnsubscribeConfirmation messages
|
140
|
+
text = "Message\n#{message}\n"
|
141
|
+
text += "MessageId\n#{message_id}\n"
|
142
|
+
text += "Subject\n#{subject}\n" unless subject.nil? or subject.empty?
|
143
|
+
text += "Timestamp\n#{timestamp}\n"
|
144
|
+
text += "TopicArn\n#{topic_arn}\n"
|
145
|
+
text += "Type\n#{type}\n"
|
146
|
+
text
|
147
|
+
end
|
148
|
+
|
149
|
+
def download url
|
150
|
+
raise MessageWasNotAuthenticError, "cert is not hosted at AWS URL (https): #{url}" unless url =~ /^https.*amazonaws\.com\/.*$/i
|
151
|
+
tries = 0
|
152
|
+
begin
|
153
|
+
resp = https_get(url)
|
154
|
+
resp.body
|
155
|
+
rescue => error
|
156
|
+
tries += 1
|
157
|
+
retry if tries < 3
|
158
|
+
raise error
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def https_get(url)
|
163
|
+
uri = URI.parse(url)
|
164
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
165
|
+
http.use_ssl = true
|
166
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
167
|
+
http.start
|
168
|
+
resp = http.request(Net::HTTP::Get.new(uri.request_uri))
|
169
|
+
http.finish
|
170
|
+
resp
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class SNS
|
16
|
+
|
17
|
+
# A module to enrich {Message} based on it originating from AutoScaling,
|
18
|
+
# which have a particular subject and message payload.
|
19
|
+
# Parses such messages into a more rich representation.
|
20
|
+
module FromAutoScaling
|
21
|
+
def self.extended base
|
22
|
+
base.origin = :autoscaling
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Boolean] true when the SNS originates from auto-scaling
|
26
|
+
def applicable? sns
|
27
|
+
sns['Subject'] =~ /.*autoscaling:.*/i
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function :applicable?
|
31
|
+
|
32
|
+
def body
|
33
|
+
return @body if defined? @body
|
34
|
+
@body = self.parse_from self.raw['Message']
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Symbol] the auto-scaling event name
|
38
|
+
def event
|
39
|
+
return @event if defined? @event
|
40
|
+
e = body['Event']
|
41
|
+
@event = case
|
42
|
+
when e =~ /EC2_INSTANCE_TERMINATE/ then :ec2_instance_terminate
|
43
|
+
when e =~ /EC2_INSTANCE_TERMINATE_ERROR/ then :ec2_instance_terminate_error
|
44
|
+
when e =~ /EC2_INSTANCE_LAUNCH/ then :ec2_instance_launch
|
45
|
+
when e =~ /EC2_INSTANCE_LAUNCH_ERROR/ then :ec2_instance_launch_error
|
46
|
+
when e =~ /TEST_NOTIFICATION/ then :test_notification
|
47
|
+
else :unknown
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [String] the auto-scaling group name
|
52
|
+
def group_name
|
53
|
+
body['AutoScalingGroupName']
|
54
|
+
end
|
55
|
+
|
56
|
+
def status_code
|
57
|
+
body['StatusCode']
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String] the instance-ID that is the subject of this event
|
61
|
+
def instance_id
|
62
|
+
body['EC2InstanceId']
|
63
|
+
end
|
64
|
+
|
65
|
+
# TODO: Further methods to fully expose what AS-SNS' carry as payload.
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/aws/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.12.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Amazon Web Services
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-07-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: uuidtools
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: nokogiri
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - <
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - <
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: json
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,14 +48,14 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.4'
|
62
55
|
description: AWS SDK for Ruby
|
63
56
|
email:
|
64
|
-
executables:
|
57
|
+
executables:
|
58
|
+
- aws-rb
|
65
59
|
extensions: []
|
66
60
|
extra_rdoc_files: []
|
67
61
|
files:
|
@@ -546,6 +540,8 @@ files:
|
|
546
540
|
- lib/aws/sns/config.rb
|
547
541
|
- lib/aws/sns/errors.rb
|
548
542
|
- lib/aws/sns/has_delivery_policy.rb
|
543
|
+
- lib/aws/sns/message.rb
|
544
|
+
- lib/aws/sns/originators/from_auto_scaling.rb
|
549
545
|
- lib/aws/sns/policy.rb
|
550
546
|
- lib/aws/sns/request.rb
|
551
547
|
- lib/aws/sns/subscription.rb
|
@@ -615,30 +611,30 @@ files:
|
|
615
611
|
- lib/aws/api_config/StorageGateway-2012-06-30.yml
|
616
612
|
- lib/aws/api_config/STS-2011-06-15.yml
|
617
613
|
- lib/aws/api_config/Support-2013-04-15.yml
|
614
|
+
- bin/aws-rb
|
618
615
|
homepage: http://aws.amazon.com/sdkforruby
|
619
616
|
licenses:
|
620
617
|
- Apache 2.0
|
618
|
+
metadata: {}
|
621
619
|
post_install_message:
|
622
620
|
rdoc_options: []
|
623
621
|
require_paths:
|
624
622
|
- lib
|
625
623
|
required_ruby_version: !ruby/object:Gem::Requirement
|
626
|
-
none: false
|
627
624
|
requirements:
|
628
|
-
- -
|
625
|
+
- - '>='
|
629
626
|
- !ruby/object:Gem::Version
|
630
627
|
version: '0'
|
631
628
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
632
|
-
none: false
|
633
629
|
requirements:
|
634
|
-
- -
|
630
|
+
- - '>='
|
635
631
|
- !ruby/object:Gem::Version
|
636
632
|
version: '0'
|
637
633
|
requirements: []
|
638
634
|
rubyforge_project:
|
639
|
-
rubygems_version:
|
635
|
+
rubygems_version: 2.0.3
|
640
636
|
signing_key:
|
641
|
-
specification_version:
|
637
|
+
specification_version: 4
|
642
638
|
summary: AWS SDK for Ruby
|
643
639
|
test_files: []
|
644
640
|
has_rdoc:
|