aws-sdk-s3 1.109.0 → 1.156.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 +4 -4
- data/CHANGELOG.md +352 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +241 -0
- data/lib/aws-sdk-s3/bucket.rb +585 -110
- data/lib/aws-sdk-s3/bucket_acl.rb +28 -6
- data/lib/aws-sdk-s3/bucket_cors.rb +34 -10
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +34 -10
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +34 -10
- data/lib/aws-sdk-s3/bucket_logging.rb +35 -6
- data/lib/aws-sdk-s3/bucket_notification.rb +12 -6
- data/lib/aws-sdk-s3/bucket_policy.rb +78 -10
- data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +28 -6
- data/lib/aws-sdk-s3/bucket_tagging.rb +34 -10
- data/lib/aws-sdk-s3/bucket_versioning.rb +72 -14
- data/lib/aws-sdk-s3/bucket_website.rb +34 -10
- data/lib/aws-sdk-s3/client.rb +7900 -3252
- data/lib/aws-sdk-s3/client_api.rb +706 -228
- data/lib/aws-sdk-s3/customizations/bucket.rb +23 -47
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/object.rb +97 -21
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +10 -0
- data/lib/aws-sdk-s3/encryption/client.rb +6 -2
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +6 -2
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
- data/lib/aws-sdk-s3/endpoint_parameters.rb +186 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +592 -0
- data/lib/aws-sdk-s3/endpoints.rb +2689 -0
- data/lib/aws-sdk-s3/express_credentials.rb +55 -0
- data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
- data/lib/aws-sdk-s3/file_downloader.rb +170 -45
- data/lib/aws-sdk-s3/file_uploader.rb +11 -4
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +30 -11
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +46 -17
- data/lib/aws-sdk-s3/multipart_upload.rb +194 -19
- data/lib/aws-sdk-s3/multipart_upload_part.rb +280 -30
- data/lib/aws-sdk-s3/object.rb +1753 -266
- data/lib/aws-sdk-s3/object_acl.rb +49 -13
- data/lib/aws-sdk-s3/object_copier.rb +7 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +46 -22
- data/lib/aws-sdk-s3/object_summary.rb +1497 -221
- data/lib/aws-sdk-s3/object_version.rb +383 -58
- data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -50
- data/lib/aws-sdk-s3/plugins/access_grants.rb +114 -0
- data/lib/aws-sdk-s3/plugins/arn.rb +0 -184
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
- data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -49
- data/lib/aws-sdk-s3/plugins/endpoints.rb +274 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +97 -0
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +53 -16
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +6 -3
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +42 -126
- data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +23 -2
- data/lib/aws-sdk-s3/presigned_post.rb +99 -78
- data/lib/aws-sdk-s3/presigner.rb +28 -37
- data/lib/aws-sdk-s3/resource.rb +89 -13
- data/lib/aws-sdk-s3/types.rb +6544 -4909
- data/lib/aws-sdk-s3.rb +5 -1
- data/sig/bucket.rbs +212 -0
- data/sig/bucket_acl.rbs +78 -0
- data/sig/bucket_cors.rbs +69 -0
- data/sig/bucket_lifecycle.rbs +88 -0
- data/sig/bucket_lifecycle_configuration.rbs +111 -0
- data/sig/bucket_logging.rbs +76 -0
- data/sig/bucket_notification.rbs +114 -0
- data/sig/bucket_policy.rbs +59 -0
- data/sig/bucket_request_payment.rbs +54 -0
- data/sig/bucket_tagging.rbs +65 -0
- data/sig/bucket_versioning.rbs +77 -0
- data/sig/bucket_website.rbs +93 -0
- data/sig/client.rbs +2381 -0
- data/sig/customizations/bucket.rbs +19 -0
- data/sig/customizations/object.rbs +38 -0
- data/sig/customizations/object_summary.rbs +35 -0
- data/sig/errors.rbs +34 -0
- data/sig/multipart_upload.rbs +110 -0
- data/sig/multipart_upload_part.rbs +105 -0
- data/sig/object.rbs +442 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +334 -0
- data/sig/object_version.rbs +137 -0
- data/sig/resource.rbs +127 -0
- data/sig/types.rbs +2568 -0
- data/sig/waiters.rbs +95 -0
- metadata +50 -16
- data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/multi_region_access_point_arn.rb +0 -68
- data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -74
- data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +0 -25
@@ -56,6 +56,10 @@ module Aws::S3
|
|
56
56
|
|
57
57
|
# If present, indicates that the requester was successfully charged for
|
58
58
|
# the request.
|
59
|
+
#
|
60
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
61
|
+
#
|
62
|
+
# </note>
|
59
63
|
# @return [String]
|
60
64
|
def request_charged
|
61
65
|
data[:request_charged]
|
@@ -75,10 +79,12 @@ module Aws::S3
|
|
75
79
|
#
|
76
80
|
# @return [self]
|
77
81
|
def load
|
78
|
-
resp =
|
82
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
83
|
+
@client.get_object_acl(
|
79
84
|
bucket: @bucket_name,
|
80
85
|
key: @object_key
|
81
86
|
)
|
87
|
+
end
|
82
88
|
@data = resp.data
|
83
89
|
self
|
84
90
|
end
|
@@ -193,7 +199,9 @@ module Aws::S3
|
|
193
199
|
:retry
|
194
200
|
end
|
195
201
|
end
|
196
|
-
Aws::
|
202
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
203
|
+
Aws::Waiters::Waiter.new(options).wait({})
|
204
|
+
end
|
197
205
|
end
|
198
206
|
|
199
207
|
# @!group Actions
|
@@ -221,6 +229,7 @@ module Aws::S3
|
|
221
229
|
# },
|
222
230
|
# },
|
223
231
|
# content_md5: "ContentMD5",
|
232
|
+
# checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
|
224
233
|
# grant_full_control: "GrantFullControl",
|
225
234
|
# grant_read: "GrantRead",
|
226
235
|
# grant_read_acp: "GrantReadACP",
|
@@ -254,19 +263,34 @@ module Aws::S3
|
|
254
263
|
#
|
255
264
|
#
|
256
265
|
# [1]: http://www.ietf.org/rfc/rfc1864.txt
|
266
|
+
# @option options [String] :checksum_algorithm
|
267
|
+
# Indicates the algorithm used to create the checksum for the object
|
268
|
+
# when you use the SDK. This header will not provide any additional
|
269
|
+
# functionality if you don't use the SDK. When you send this header,
|
270
|
+
# there must be a corresponding `x-amz-checksum` or `x-amz-trailer`
|
271
|
+
# header sent. Otherwise, Amazon S3 fails the request with the HTTP
|
272
|
+
# status code `400 Bad Request`. For more information, see [Checking
|
273
|
+
# object integrity][1] in the *Amazon S3 User Guide*.
|
274
|
+
#
|
275
|
+
# If you provide an individual checksum, Amazon S3 ignores any provided
|
276
|
+
# `ChecksumAlgorithm` parameter.
|
277
|
+
#
|
278
|
+
#
|
279
|
+
#
|
280
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
257
281
|
# @option options [String] :grant_full_control
|
258
282
|
# Allows grantee the read, write, read ACP, and write ACP permissions on
|
259
283
|
# the bucket.
|
260
284
|
#
|
261
|
-
# This
|
285
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
262
286
|
# @option options [String] :grant_read
|
263
287
|
# Allows grantee to list the objects in the bucket.
|
264
288
|
#
|
265
|
-
# This
|
289
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
266
290
|
# @option options [String] :grant_read_acp
|
267
291
|
# Allows grantee to read the bucket ACL.
|
268
292
|
#
|
269
|
-
# This
|
293
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
270
294
|
# @option options [String] :grant_write
|
271
295
|
# Allows grantee to create new objects in the bucket.
|
272
296
|
#
|
@@ -275,30 +299,42 @@ module Aws::S3
|
|
275
299
|
# @option options [String] :grant_write_acp
|
276
300
|
# Allows grantee to write the ACL for the applicable bucket.
|
277
301
|
#
|
278
|
-
# This
|
302
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
279
303
|
# @option options [String] :request_payer
|
280
304
|
# Confirms that the requester knows that they will be charged for the
|
281
305
|
# request. Bucket owners need not specify this parameter in their
|
282
|
-
# requests.
|
283
|
-
#
|
306
|
+
# requests. If either the source or destination S3 bucket has Requester
|
307
|
+
# Pays enabled, the requester will pay for corresponding charges to copy
|
308
|
+
# the object. For information about downloading objects from Requester
|
309
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
284
310
|
# in the *Amazon S3 User Guide*.
|
285
311
|
#
|
312
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
313
|
+
#
|
314
|
+
# </note>
|
315
|
+
#
|
286
316
|
#
|
287
317
|
#
|
288
318
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
289
319
|
# @option options [String] :version_id
|
290
|
-
#
|
320
|
+
# Version ID used to reference a specific version of the object.
|
321
|
+
#
|
322
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
323
|
+
#
|
324
|
+
# </note>
|
291
325
|
# @option options [String] :expected_bucket_owner
|
292
|
-
# The account ID of the expected bucket owner. If the
|
293
|
-
#
|
294
|
-
#
|
326
|
+
# The account ID of the expected bucket owner. If the account ID that
|
327
|
+
# you provide does not match the actual owner of the bucket, the request
|
328
|
+
# fails with the HTTP status code `403 Forbidden` (access denied).
|
295
329
|
# @return [Types::PutObjectAclOutput]
|
296
330
|
def put(options = {})
|
297
331
|
options = options.merge(
|
298
332
|
bucket: @bucket_name,
|
299
333
|
key: @object_key
|
300
334
|
)
|
301
|
-
resp =
|
335
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
336
|
+
@client.put_object_acl(options)
|
337
|
+
end
|
302
338
|
resp.data
|
303
339
|
end
|
304
340
|
|
@@ -28,11 +28,13 @@ module Aws
|
|
28
28
|
options[:bucket] = target_bucket
|
29
29
|
options[:key] = target_key
|
30
30
|
options[:copy_source] = copy_source(source)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
Aws::Plugins::UserAgent.metric('S3_TRANSFER') do
|
32
|
+
if options.delete(:multipart_copy)
|
33
|
+
apply_source_client(source, options)
|
34
|
+
ObjectMultipartCopier.new(@options).copy(options)
|
35
|
+
else
|
36
|
+
@object.client.copy_object(options)
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -15,12 +15,18 @@ module Aws
|
|
15
15
|
MAX_PARTS = 10_000
|
16
16
|
|
17
17
|
# @option options [Client] :client
|
18
|
-
# @option [Integer] :min_part_size (52428800)
|
19
|
-
# Defaults to 50MB.
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
18
|
+
# @option options [Integer] :min_part_size (52428800)
|
19
|
+
# Size of copied parts. Defaults to 50MB.
|
20
|
+
# @option options [Integer] :thread_count (10) Number of concurrent
|
21
|
+
# threads to use for copying parts.
|
22
|
+
# @option options [Boolean] :use_source_parts (false) Use part sizes
|
23
|
+
# defined on the source object if any exist. If copying or moving an
|
24
|
+
# object that is already multipart, this does not re-part the object,
|
25
|
+
# instead re-using the part definitions on the original. That means
|
26
|
+
# the etag and any checksums will not change. This is especially
|
27
|
+
# useful if the source object has parts with varied sizes.
|
23
28
|
def initialize(options = {})
|
29
|
+
@use_source_parts = options.delete(:use_source_parts) || false
|
24
30
|
@thread_count = options.delete(:thread_count) || 10
|
25
31
|
@min_part_size = options.delete(:min_part_size) || (FIVE_MB * 10)
|
26
32
|
@client = options[:client] || Client.new
|
@@ -31,8 +37,9 @@ module Aws
|
|
31
37
|
|
32
38
|
# @option (see S3::Client#copy_object)
|
33
39
|
def copy(options = {})
|
34
|
-
|
35
|
-
|
40
|
+
metadata = source_metadata(options)
|
41
|
+
size = metadata[:content_length]
|
42
|
+
options[:upload_id] = initiate_upload(metadata.merge(options))
|
36
43
|
begin
|
37
44
|
parts = copy_parts(size, default_part_size(size), options)
|
38
45
|
complete_upload(parts, options)
|
@@ -74,10 +81,9 @@ module Aws
|
|
74
81
|
end
|
75
82
|
|
76
83
|
def copy_part(part)
|
77
|
-
{
|
78
|
-
|
79
|
-
|
80
|
-
}
|
84
|
+
@client.upload_part_copy(part).copy_part_result.to_h.merge({
|
85
|
+
part_number: part[:part_number]
|
86
|
+
}).tap { |result| result.delete(:last_modified) }
|
81
87
|
end
|
82
88
|
|
83
89
|
def complete_upload(parts, options)
|
@@ -100,26 +106,39 @@ module Aws
|
|
100
106
|
parts = []
|
101
107
|
options = options_for(:upload_part_copy, options)
|
102
108
|
while offset < size
|
109
|
+
part_size = calculate_part_size(part_number, default_part_size, options)
|
103
110
|
parts << options.merge({
|
104
111
|
part_number: part_number,
|
105
|
-
copy_source_range: byte_range(offset,
|
112
|
+
copy_source_range: byte_range(offset, part_size, size),
|
106
113
|
})
|
107
114
|
part_number += 1
|
108
|
-
offset +=
|
115
|
+
offset += part_size
|
109
116
|
end
|
110
117
|
parts
|
111
118
|
end
|
112
119
|
|
113
|
-
def byte_range(offset,
|
114
|
-
if offset +
|
115
|
-
"bytes=#{offset}-#{offset +
|
120
|
+
def byte_range(offset, part_size, size)
|
121
|
+
if offset + part_size < size
|
122
|
+
"bytes=#{offset}-#{offset + part_size - 1}"
|
116
123
|
else
|
117
124
|
"bytes=#{offset}-#{size - 1}"
|
118
125
|
end
|
119
126
|
end
|
120
127
|
|
121
|
-
def
|
122
|
-
|
128
|
+
def calculate_part_size(part_number, default_part_size, options)
|
129
|
+
if @use_source_parts && source_has_parts(options)
|
130
|
+
source_metadata(options.merge({ part_number: part_number }))[:content_length]
|
131
|
+
else
|
132
|
+
default_part_size
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def source_has_parts(options)
|
137
|
+
@source_has_parts ||= source_metadata(options.merge({ part_number: 1 }))[:parts_count]
|
138
|
+
end
|
139
|
+
|
140
|
+
def source_metadata(options)
|
141
|
+
return options.slice(:content_length) if options[:content_length]
|
123
142
|
|
124
143
|
client = options[:copy_source_client] || @client
|
125
144
|
|
@@ -129,10 +148,15 @@ module Aws
|
|
129
148
|
bucket, key = options[:copy_source].match(/([^\/]+?)\/(.+)/)[1,2]
|
130
149
|
end
|
131
150
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
151
|
+
head_opts = { bucket: bucket, key: CGI.unescape(key) }.tap { |opts|
|
152
|
+
opts[:version_id] = version_id if version_id
|
153
|
+
opts[:part_number] = options[:part_number] if options[:part_number]
|
154
|
+
}
|
155
|
+
|
156
|
+
client.head_object(head_opts).to_h.tap { |head|
|
157
|
+
head.delete(:server_side_encryption)
|
158
|
+
head.delete(:ssekms_key_id)
|
159
|
+
}
|
136
160
|
end
|
137
161
|
|
138
162
|
def default_part_size(source_size)
|