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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +352 -0
  3. data/VERSION +1 -1
  4. data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
  5. data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +241 -0
  6. data/lib/aws-sdk-s3/bucket.rb +585 -110
  7. data/lib/aws-sdk-s3/bucket_acl.rb +28 -6
  8. data/lib/aws-sdk-s3/bucket_cors.rb +34 -10
  9. data/lib/aws-sdk-s3/bucket_lifecycle.rb +34 -10
  10. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +34 -10
  11. data/lib/aws-sdk-s3/bucket_logging.rb +35 -6
  12. data/lib/aws-sdk-s3/bucket_notification.rb +12 -6
  13. data/lib/aws-sdk-s3/bucket_policy.rb +78 -10
  14. data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
  15. data/lib/aws-sdk-s3/bucket_request_payment.rb +28 -6
  16. data/lib/aws-sdk-s3/bucket_tagging.rb +34 -10
  17. data/lib/aws-sdk-s3/bucket_versioning.rb +72 -14
  18. data/lib/aws-sdk-s3/bucket_website.rb +34 -10
  19. data/lib/aws-sdk-s3/client.rb +7900 -3252
  20. data/lib/aws-sdk-s3/client_api.rb +706 -228
  21. data/lib/aws-sdk-s3/customizations/bucket.rb +23 -47
  22. data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
  23. data/lib/aws-sdk-s3/customizations/object.rb +97 -21
  24. data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
  25. data/lib/aws-sdk-s3/customizations.rb +10 -0
  26. data/lib/aws-sdk-s3/encryption/client.rb +6 -2
  27. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
  28. data/lib/aws-sdk-s3/encryptionV2/client.rb +6 -2
  29. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -0
  30. data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
  31. data/lib/aws-sdk-s3/endpoint_parameters.rb +186 -0
  32. data/lib/aws-sdk-s3/endpoint_provider.rb +592 -0
  33. data/lib/aws-sdk-s3/endpoints.rb +2689 -0
  34. data/lib/aws-sdk-s3/express_credentials.rb +55 -0
  35. data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
  36. data/lib/aws-sdk-s3/file_downloader.rb +170 -45
  37. data/lib/aws-sdk-s3/file_uploader.rb +11 -4
  38. data/lib/aws-sdk-s3/multipart_file_uploader.rb +30 -11
  39. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +46 -17
  40. data/lib/aws-sdk-s3/multipart_upload.rb +194 -19
  41. data/lib/aws-sdk-s3/multipart_upload_part.rb +280 -30
  42. data/lib/aws-sdk-s3/object.rb +1753 -266
  43. data/lib/aws-sdk-s3/object_acl.rb +49 -13
  44. data/lib/aws-sdk-s3/object_copier.rb +7 -5
  45. data/lib/aws-sdk-s3/object_multipart_copier.rb +46 -22
  46. data/lib/aws-sdk-s3/object_summary.rb +1497 -221
  47. data/lib/aws-sdk-s3/object_version.rb +383 -58
  48. data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -50
  49. data/lib/aws-sdk-s3/plugins/access_grants.rb +114 -0
  50. data/lib/aws-sdk-s3/plugins/arn.rb +0 -184
  51. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
  52. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
  53. data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -49
  54. data/lib/aws-sdk-s3/plugins/endpoints.rb +274 -0
  55. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
  56. data/lib/aws-sdk-s3/plugins/express_session_auth.rb +97 -0
  57. data/lib/aws-sdk-s3/plugins/http_200_errors.rb +53 -16
  58. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
  59. data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
  60. data/lib/aws-sdk-s3/plugins/md5s.rb +6 -3
  61. data/lib/aws-sdk-s3/plugins/s3_signer.rb +42 -126
  62. data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
  63. data/lib/aws-sdk-s3/plugins/streaming_retry.rb +23 -2
  64. data/lib/aws-sdk-s3/presigned_post.rb +99 -78
  65. data/lib/aws-sdk-s3/presigner.rb +28 -37
  66. data/lib/aws-sdk-s3/resource.rb +89 -13
  67. data/lib/aws-sdk-s3/types.rb +6544 -4909
  68. data/lib/aws-sdk-s3.rb +5 -1
  69. data/sig/bucket.rbs +212 -0
  70. data/sig/bucket_acl.rbs +78 -0
  71. data/sig/bucket_cors.rbs +69 -0
  72. data/sig/bucket_lifecycle.rbs +88 -0
  73. data/sig/bucket_lifecycle_configuration.rbs +111 -0
  74. data/sig/bucket_logging.rbs +76 -0
  75. data/sig/bucket_notification.rbs +114 -0
  76. data/sig/bucket_policy.rbs +59 -0
  77. data/sig/bucket_request_payment.rbs +54 -0
  78. data/sig/bucket_tagging.rbs +65 -0
  79. data/sig/bucket_versioning.rbs +77 -0
  80. data/sig/bucket_website.rbs +93 -0
  81. data/sig/client.rbs +2381 -0
  82. data/sig/customizations/bucket.rbs +19 -0
  83. data/sig/customizations/object.rbs +38 -0
  84. data/sig/customizations/object_summary.rbs +35 -0
  85. data/sig/errors.rbs +34 -0
  86. data/sig/multipart_upload.rbs +110 -0
  87. data/sig/multipart_upload_part.rbs +105 -0
  88. data/sig/object.rbs +442 -0
  89. data/sig/object_acl.rbs +86 -0
  90. data/sig/object_summary.rbs +334 -0
  91. data/sig/object_version.rbs +137 -0
  92. data/sig/resource.rbs +127 -0
  93. data/sig/types.rbs +2568 -0
  94. data/sig/waiters.rbs +95 -0
  95. metadata +50 -16
  96. data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
  97. data/lib/aws-sdk-s3/arn/multi_region_access_point_arn.rb +0 -68
  98. data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
  99. data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -74
  100. 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 = @client.get_object_acl(
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::Waiters::Waiter.new(options).wait({})
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 action is not supported by Amazon S3 on Outposts.
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 action is not supported by Amazon S3 on Outposts.
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 action is not supported by Amazon S3 on Outposts.
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 action is not supported by Amazon S3 on Outposts.
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. For information about downloading objects from requester
283
- # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
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
- # VersionId used to reference a specific version of the object.
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 bucket is owned by
293
- # a different account, the request will fail with an HTTP `403 (Access
294
- # Denied)` error.
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 = @client.put_object_acl(options)
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
- if options.delete(:multipart_copy)
32
- apply_source_client(source, options)
33
- ObjectMultipartCopier.new(@options).copy(options)
34
- else
35
- @object.client.copy_object(options)
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) Size of copied parts.
19
- # Defaults to 50MB.
20
- # will be constructed from the given `options' hash.
21
- # @option [Integer] :thread_count (10) Number of concurrent threads to
22
- # use for copying parts.
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
- size = source_size(options)
35
- options[:upload_id] = initiate_upload(options)
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
- etag: @client.upload_part_copy(part).copy_part_result.etag,
79
- part_number: part[:part_number],
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, default_part_size, size),
112
+ copy_source_range: byte_range(offset, part_size, size),
106
113
  })
107
114
  part_number += 1
108
- offset += default_part_size
115
+ offset += part_size
109
116
  end
110
117
  parts
111
118
  end
112
119
 
113
- def byte_range(offset, default_part_size, size)
114
- if offset + default_part_size < size
115
- "bytes=#{offset}-#{offset + default_part_size - 1}"
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 source_size(options)
122
- return options.delete(:content_length) if options[:content_length]
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
- key = CGI.unescape(key)
133
- opts = { bucket: bucket, key: key }
134
- opts[:version_id] = version_id if version_id
135
- client.head_object(opts).content_length
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)