Class: Aws::S3::Bucket

Inherits:
Object
  • Object
show all
Extended by:
Deprecations
Defined in:
lib/aws-sdk-s3/customizations/bucket.rb,
lib/aws-sdk-s3/bucket.rb

Defined Under Namespace

Classes: Collection

Read-Only Attributes collapse

Actions collapse

Associations collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Bucket #initialize(options = {}) ⇒ Bucket

Returns a new instance of Bucket.

Overloads:

  • #initialize(name, options = {}) ⇒ Bucket

    Parameters:

    • name (String)

    Options Hash (options):

  • #initialize(options = {}) ⇒ Bucket

    Options Hash (options):

    • :name (required, String)
    • :client (Client)


22
23
24
25
26
27
28
# File 'lib/aws-sdk-s3/bucket.rb', line 22

def initialize(*args)
  options = Hash === args.last ? args.pop.dup : {}
  @name = extract_name(args, options)
  @data = options.delete(:data)
  @client = options.delete(:client) || Client.new(options)
  @waiter_block_warned = false
end

Instance Method Details

#aclBucketAcl

Returns:



1106
1107
1108
1109
1110
1111
# File 'lib/aws-sdk-s3/bucket.rb', line 1106

def acl
  BucketAcl.new(
    bucket_name: @name,
    client: @client
  )
end

#bucket_regionString

‘BucketRegion` indicates the Amazon Web Services region where the bucket is located. If the request contains at least one valid parameter, it is included in the response.

Returns:

  • (String)


48
49
50
# File 'lib/aws-sdk-s3/bucket.rb', line 48

def bucket_region
  data[:bucket_region]
end

#clear!void

This method returns an undefined value.

Deletes all objects and versioned objects from this bucket

Examples:


bucket.clear!


15
16
17
# File 'lib/aws-sdk-s3/customizations/bucket.rb', line 15

def clear!
  object_versions.batch_delete!
end

#clientClient

Returns:



55
56
57
# File 'lib/aws-sdk-s3/bucket.rb', line 55

def client
  @client
end

#corsBucketCors

Returns:



1114
1115
1116
1117
1118
1119
# File 'lib/aws-sdk-s3/bucket.rb', line 1114

def cors
  BucketCors.new(
    bucket_name: @name,
    client: @client
  )
end

#create(options = {}) ⇒ Types::CreateBucketOutput

Examples:

Request syntax with placeholder values


bucket.create({
  acl: "private", # accepts private, public-read, public-read-write, authenticated-read
  create_bucket_configuration: {
    location_constraint: "af-south-1", # accepts af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ca-central-1, cn-north-1, cn-northwest-1, EU, eu-central-1, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, eu-west-3, me-south-1, sa-east-1, us-east-2, us-gov-east-1, us-gov-west-1, us-west-1, us-west-2
    location: {
      type: "AvailabilityZone", # accepts AvailabilityZone
      name: "LocationNameAsString",
    },
    bucket: {
      data_redundancy: "SingleAvailabilityZone", # accepts SingleAvailabilityZone
      type: "Directory", # accepts Directory
    },
  },
  grant_full_control: "GrantFullControl",
  grant_read: "GrantRead",
  grant_read_acp: "GrantReadACP",
  grant_write: "GrantWrite",
  grant_write_acp: "GrantWriteACP",
  object_lock_enabled_for_bucket: false,
  object_ownership: "BucketOwnerPreferred", # accepts BucketOwnerPreferred, ObjectWriter, BucketOwnerEnforced
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :acl (String)

    The canned ACL to apply to the bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :create_bucket_configuration (Types::CreateBucketConfiguration)

    The configuration information for the bucket.

  • :grant_full_control (String)

    Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :grant_read (String)

    Allows grantee to list the objects in the bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :grant_read_acp (String)

    Allows grantee to read the bucket ACL.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :grant_write (String)

    Allows grantee to create new objects in the bucket.

    For the bucket and object owners of existing objects, also allows deletions and overwrites of those objects.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :grant_write_acp (String)

    Allows grantee to write the ACL for the applicable bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :object_lock_enabled_for_bucket (Boolean)

    Specifies whether you want S3 Object Lock to be enabled for the new bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :object_ownership (String)

    The container element for object ownership for a bucket’s ownership controls.

    ‘BucketOwnerPreferred` - Objects uploaded to the bucket change ownership to the bucket owner if the objects are uploaded with the `bucket-owner-full-control` canned ACL.

    ‘ObjectWriter` - The uploading account will own the object if the object is uploaded with the `bucket-owner-full-control` canned ACL.

    ‘BucketOwnerEnforced` - Access control lists (ACLs) are disabled and no longer affect permissions. The bucket owner automatically owns and has full control over every object in the bucket. The bucket only accepts PUT requests that don’t specify an ACL or specify bucket owner full control ACLs (such as the predefined ‘bucket-owner-full-control` canned ACL or a custom ACL in XML format that grants the same permissions).

    By default, ‘ObjectOwnership` is set to `BucketOwnerEnforced` and ACLs are disabled. We recommend keeping ACLs disabled, except in uncommon use cases where you must control access for each object individually. For more information about S3 Object Ownership, see [Controlling ownership of objects and disabling ACLs for your bucket] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets. Directory buckets use the bucket owner enforced setting for S3 Object Ownership.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html

Returns:



343
344
345
346
347
348
349
# File 'lib/aws-sdk-s3/bucket.rb', line 343

def create(options = {})
  options = options.merge(bucket: @name)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.create_bucket(options)
  end
  resp.data
end

#creation_dateTime

Date the bucket was created. This date can change when making changes to your bucket, such as editing its bucket policy.

Returns:

  • (Time)


40
41
42
# File 'lib/aws-sdk-s3/bucket.rb', line 40

def creation_date
  data[:creation_date]
end

#dataTypes::Bucket

Returns the data for this Aws::S3::Bucket.

Returns:

Raises:

  • (NotImplementedError)

    Raises when #data_loaded? is ‘false`.



70
71
72
73
# File 'lib/aws-sdk-s3/bucket.rb', line 70

def data
  load unless @data
  @data
end

#data_loaded?Boolean

Returns ‘true` if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.

Returns:

  • (Boolean)

    Returns ‘true` if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.



78
79
80
# File 'lib/aws-sdk-s3/bucket.rb', line 78

def data_loaded?
  !!@data
end

#delete(options = {}) ⇒ EmptyStructure

Examples:

Request syntax with placeholder values


bucket.delete({
  expected_bucket_owner: "AccountId",
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

    <note markdown=“1”> For directory buckets, this header is not supported in this API operation. If you specify this header, the request fails with the HTTP status code ‘501 Not Implemented`.

    </note>
    

Returns:

  • (EmptyStructure)


368
369
370
371
372
373
374
# File 'lib/aws-sdk-s3/bucket.rb', line 368

def delete(options = {})
  options = options.merge(bucket: @name)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.delete_bucket(options)
  end
  resp.data
end

#delete!(options = {}) ⇒ void

This method returns an undefined value.

Deletes all objects and versioned objects from this bucket and then deletes the bucket.

Examples:


bucket.delete!

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :max_attempts (Integer) — default: 3

    Maximum number of times to attempt to delete the empty bucket before raising ‘Aws::S3::Errors::BucketNotEmpty`.

  • :initial_wait (Float) — default: 1.3

    Seconds to wait before retrying the call to delete the bucket, exponentially increased for each attempt.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/aws-sdk-s3/customizations/bucket.rb', line 35

def delete!(options = {})
  options = {
    initial_wait: 1.3,
    max_attempts: 3
  }.merge(options)

  attempts = 0
  begin
    clear!
    delete
  rescue Errors::BucketNotEmpty
    attempts += 1
    raise if attempts >= options[:max_attempts]

    Kernel.sleep(options[:initial_wait]**attempts)
    retry
  end
end

#delete_objects(options = {}) ⇒ Types::DeleteObjectsOutput

Examples:

Request syntax with placeholder values


bucket.delete_objects({
  delete: { # required
    objects: [ # required
      {
        key: "ObjectKey", # required
        version_id: "ObjectVersionId",
        etag: "ETag",
        last_modified_time: Time.now,
        size: 1,
      },
    ],
    quiet: false,
  },
  mfa: "MFA",
  request_payer: "requester", # accepts requester
  bypass_governance_retention: false,
  expected_bucket_owner: "AccountId",
  checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :delete (required, Types::Delete)

    Container for the request.

  • :mfa (String)

    The concatenation of the authentication device’s serial number, a space, and the value that is displayed on your authentication device. Required to permanently delete a versioned object if versioning is configured with MFA delete enabled.

    When performing the ‘DeleteObjects` operation on an MFA delete enabled bucket, which attempts to delete the specified versioned objects, you must include an MFA token. If you don’t provide an MFA token, the entire request will fail, even if there are non-versioned objects that you are trying to delete. If you provide an invalid token, whether there are versioned object keys in the request or not, the entire Multi-Object Delete request will fail. For information about MFA Delete, see [ MFA Delete] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see [Downloading Objects in Requester Pays Buckets] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html

  • :bypass_governance_retention (Boolean)

    Specifies whether you want to delete this object even if it has a Governance-type Object Lock in place. To use this header, you must have the ‘s3:BypassGovernanceRetention` permission.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

  • :checksum_algorithm (String)

    Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don’t use the SDK. When you send this header, there must be a corresponding ‘x-amz-checksum-algorithm ` or `x-amz-trailer` header sent. Otherwise, Amazon S3 fails the request with the HTTP status code `400 Bad Request`.

    For the ‘x-amz-checksum-algorithm ` header, replace ` algorithm ` with the supported algorithm from the following list:

    • ‘CRC32`

    • ‘CRC32C`

    • ‘SHA1`

    • ‘SHA256`

    For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    If the individual checksum value you provide through ‘x-amz-checksum-algorithm ` doesn’t match the checksum algorithm you set through ‘x-amz-sdk-checksum-algorithm`, Amazon S3 ignores any provided `ChecksumAlgorithm` parameter and uses the checksum algorithm that matches the provided value in `x-amz-checksum-algorithm `.

    If you provide an individual checksum, Amazon S3 ignores any provided ‘ChecksumAlgorithm` parameter.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

Returns:



485
486
487
488
489
490
491
# File 'lib/aws-sdk-s3/bucket.rb', line 485

def delete_objects(options = {})
  options = options.merge(bucket: @name)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.delete_objects(options)
  end
  resp.data
end

#exists?(options = {}) ⇒ Boolean

Returns ‘true` if the Bucket exists.

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Returns:

  • (Boolean)

    Returns ‘true` if the Bucket exists.



85
86
87
88
89
90
91
92
93
94
# File 'lib/aws-sdk-s3/bucket.rb', line 85

def exists?(options = {})
  begin
    wait_until_exists(options.merge(max_attempts: 1))
    true
  rescue Aws::Waiters::Errors::UnexpectedError => e
    raise e.error
  rescue Aws::Waiters::Errors::WaiterFailed
    false
  end
end

#identifiersObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Deprecated.


1562
1563
1564
# File 'lib/aws-sdk-s3/bucket.rb', line 1562

def identifiers
  { name: @name }
end

#lifecycleBucketLifecycle

Returns:



1122
1123
1124
1125
1126
1127
# File 'lib/aws-sdk-s3/bucket.rb', line 1122

def lifecycle
  BucketLifecycle.new(
    bucket_name: @name,
    client: @client
  )
end

#lifecycle_configurationBucketLifecycleConfiguration



1130
1131
1132
1133
1134
1135
# File 'lib/aws-sdk-s3/bucket.rb', line 1130

def lifecycle_configuration
  BucketLifecycleConfiguration.new(
    bucket_name: @name,
    client: @client
  )
end

#loadObject Also known as: reload

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Raises:

  • (NotImplementedError)


136
137
138
139
140
141
142
143
# File 'lib/aws-sdk-s3/customizations/bucket.rb', line 136

def load
  @data = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    client.list_buckets.buckets.find { |b| b.name == name }
  end
  raise "unable to load bucket #{name}" if @data.nil?

  self
end

#loggingBucketLogging

Returns:



1138
1139
1140
1141
1142
1143
# File 'lib/aws-sdk-s3/bucket.rb', line 1138

def logging
  BucketLogging.new(
    bucket_name: @name,
    client: @client
  )
end

#multipart_uploads(options = {}) ⇒ MultipartUpload::Collection

Examples:

Request syntax with placeholder values


multipart_uploads = bucket.multipart_uploads({
  delimiter: "Delimiter",
  encoding_type: "url", # accepts url
  key_marker: "KeyMarker",
  prefix: "Prefix",
  upload_id_marker: "UploadIdMarker",
  expected_bucket_owner: "AccountId",
  request_payer: "requester", # accepts requester
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :delimiter (String)

    Character you use to group keys.

    All keys that contain the same string between the prefix, if specified, and the first occurrence of the delimiter after the prefix are grouped under a single result element, ‘CommonPrefixes`. If you don’t specify the prefix parameter, then the substring starts at the beginning of the key. The keys that are grouped under ‘CommonPrefixes` result element are not returned elsewhere in the response.

    <note markdown=“1”> **Directory buckets** - For directory buckets, ‘/` is the only supported delimiter.

    </note>
    
  • :encoding_type (String)

    Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are encoded only in UTF-8. An object key can contain any Unicode character. However, the XML 1.0 parser can’t parse certain characters, such as characters with an ASCII value from 0 to 10. For characters that aren’t supported in XML 1.0, you can add this parameter to request that Amazon S3 encode the keys in the response. For more information about characters to avoid in object key names, see [Object key naming guidelines].

    <note markdown=“1”> When using the URL encoding type, non-ASCII characters that are used in an object’s key name will be percent-encoded according to UTF-8 code values. For example, the object ‘test_file(3).png` will appear as `test_file%283%29.png`.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines

  • :key_marker (String)

    Specifies the multipart upload after which listing should begin.

    <note markdown=“1”> * **General purpose buckets** - For general purpose buckets,

    `key-marker` is an object key. Together with `upload-id-marker`,
    this parameter specifies the multipart upload after which listing
    should begin.
    
    If `upload-id-marker` is not specified, only the keys
    lexicographically greater than the specified `key-marker` will be
    included in the list.
    
    If `upload-id-marker` is specified, any multipart uploads for a key
    equal to the `key-marker` might also be included, provided those
    multipart uploads have upload IDs lexicographically greater than the
    specified `upload-id-marker`.
    
    • **Directory buckets** - For directory buckets, ‘key-marker` is obfuscated and isn’t a real object key. The ‘upload-id-marker` parameter isn’t supported by directory buckets. To list the additional multipart uploads, you only need to set the value of ‘key-marker` to the `NextKeyMarker` value from the previous response.

      In the ‘ListMultipartUploads` response, the multipart uploads aren’t sorted lexicographically based on the object keys.

    </note>
    
  • :prefix (String)

    Lists in-progress uploads only for those keys that begin with the specified prefix. You can use prefixes to separate a bucket into different grouping of keys. (You can think of using ‘prefix` to make groups in the same way that you’d use a folder in a file system.)

    <note markdown=“1”> **Directory buckets** - For directory buckets, only prefixes that end in a delimiter (‘/`) are supported.

    </note>
    
  • :upload_id_marker (String)

    Together with key-marker, specifies the multipart upload after which listing should begin. If key-marker is not specified, the upload-id-marker parameter is ignored. Otherwise, any multipart uploads for a key equal to the key-marker might be included in the list only if they have an upload ID lexicographically greater than the specified ‘upload-id-marker`.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see [Downloading Objects in Requester Pays Buckets] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html

Returns:



1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
# File 'lib/aws-sdk-s3/bucket.rb', line 1262

def multipart_uploads(options = {})
  batches = Enumerator.new do |y|
    options = options.merge(bucket: @name)
    resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
      @client.list_multipart_uploads(options)
    end
    resp.each_page do |page|
      batch = []
      page.data.uploads.each do |u|
        batch << MultipartUpload.new(
          bucket_name: @name,
          object_key: u.key,
          id: u.upload_id,
          data: u,
          client: @client
        )
      end
      y.yield(batch)
    end
  end
  MultipartUpload::Collection.new(batches)
end

#nameString

Returns:

  • (String)


33
34
35
# File 'lib/aws-sdk-s3/bucket.rb', line 33

def name
  @name
end

#notificationBucketNotification

Returns:



1286
1287
1288
1289
1290
1291
# File 'lib/aws-sdk-s3/bucket.rb', line 1286

def notification
  BucketNotification.new(
    bucket_name: @name,
    client: @client
  )
end

#object(key) ⇒ Object

Parameters:

  • key (String)

Returns:



1295
1296
1297
1298
1299
1300
1301
# File 'lib/aws-sdk-s3/bucket.rb', line 1295

def object(key)
  Object.new(
    bucket_name: @name,
    key: key,
    client: @client
  )
end

#object_versions(options = {}) ⇒ ObjectVersion::Collection

Examples:

Request syntax with placeholder values


object_versions = bucket.object_versions({
  delimiter: "Delimiter",
  encoding_type: "url", # accepts url
  key_marker: "KeyMarker",
  prefix: "Prefix",
  version_id_marker: "VersionIdMarker",
  expected_bucket_owner: "AccountId",
  request_payer: "requester", # accepts requester
  optional_object_attributes: ["RestoreStatus"], # accepts RestoreStatus
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :delimiter (String)

    A delimiter is a character that you specify to group keys. All keys that contain the same string between the ‘prefix` and the first occurrence of the delimiter are grouped under a single result element in `CommonPrefixes`. These groups are counted as one result against the `max-keys` limitation. These keys are not returned elsewhere in the response.

  • :encoding_type (String)

    Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are encoded only in UTF-8. An object key can contain any Unicode character. However, the XML 1.0 parser can’t parse certain characters, such as characters with an ASCII value from 0 to 10. For characters that aren’t supported in XML 1.0, you can add this parameter to request that Amazon S3 encode the keys in the response. For more information about characters to avoid in object key names, see [Object key naming guidelines].

    <note markdown=“1”> When using the URL encoding type, non-ASCII characters that are used in an object’s key name will be percent-encoded according to UTF-8 code values. For example, the object ‘test_file(3).png` will appear as `test_file%283%29.png`.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines

  • :key_marker (String)

    Specifies the key to start with when listing objects in a bucket.

  • :prefix (String)

    Use this parameter to select only those keys that begin with the specified prefix. You can use prefixes to separate a bucket into different groupings of keys. (You can think of using ‘prefix` to make groups in the same way that you’d use a folder in a file system.) You can use ‘prefix` with `delimiter` to roll up numerous objects into a single result under `CommonPrefixes`.

  • :version_id_marker (String)

    Specifies the object version you want to start listing from.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see [Downloading Objects in Requester Pays Buckets] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html

  • :optional_object_attributes (Array<String>)

    Specifies the optional fields that you want returned in the response. Fields that you do not specify are not returned.

Returns:



1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
# File 'lib/aws-sdk-s3/bucket.rb', line 1379

def object_versions(options = {})
  batches = Enumerator.new do |y|
    options = options.merge(bucket: @name)
    resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
      @client.list_object_versions(options)
    end
    resp.each_page do |page|
      batch = []
      page.data.versions_delete_markers.each do |v|
        batch << ObjectVersion.new(
          bucket_name: @name,
          object_key: v.key,
          id: v.version_id,
          data: v,
          client: @client
        )
      end
      y.yield(batch)
    end
  end
  ObjectVersion::Collection.new(batches)
end

#objects(options = {}) ⇒ ObjectSummary::Collection

Examples:

Request syntax with placeholder values


objects = bucket.objects({
  delimiter: "Delimiter",
  encoding_type: "url", # accepts url
  prefix: "Prefix",
  fetch_owner: false,
  start_after: "StartAfter",
  request_payer: "requester", # accepts requester
  expected_bucket_owner: "AccountId",
  optional_object_attributes: ["RestoreStatus"], # accepts RestoreStatus
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :delimiter (String)

    A delimiter is a character that you use to group keys.

    <note markdown=“1”> * **Directory buckets** - For directory buckets, ‘/` is the only

    supported delimiter.
    
    • Directory buckets - When you query ‘ListObjectsV2` with a delimiter during in-progress multipart uploads, the `CommonPrefixes` response parameter contains the prefixes that are associated with the in-progress multipart uploads. For more information about multipart uploads, see [Multipart Upload Overview] in the *Amazon S3 User Guide*.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html

  • :encoding_type (String)

    Encoding type used by Amazon S3 to encode the [object keys] in the response. Responses are encoded only in UTF-8. An object key can contain any Unicode character. However, the XML 1.0 parser can’t parse certain characters, such as characters with an ASCII value from 0 to 10. For characters that aren’t supported in XML 1.0, you can add this parameter to request that Amazon S3 encode the keys in the response. For more information about characters to avoid in object key names, see [Object key naming guidelines].

    <note markdown=“1”> When using the URL encoding type, non-ASCII characters that are used in an object’s key name will be percent-encoded according to UTF-8 code values. For example, the object ‘test_file(3).png` will appear as `test_file%283%29.png`.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines

  • :prefix (String)

    Limits the response to keys that begin with the specified prefix.

    <note markdown=“1”> **Directory buckets** - For directory buckets, only prefixes that end in a delimiter (‘/`) are supported.

    </note>
    
  • :fetch_owner (Boolean)

    The owner field is not present in ‘ListObjectsV2` by default. If you want to return the owner field with each key in the result, then set the `FetchOwner` field to `true`.

    <note markdown=“1”> **Directory buckets** - For directory buckets, the bucket owner is returned as the object owner for all objects.

    </note>
    
  • :start_after (String)

    StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :request_payer (String)

    Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

  • :optional_object_attributes (Array<String>)

    Specifies the optional fields that you want returned in the response. Fields that you do not specify are not returned.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

Returns:



1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
# File 'lib/aws-sdk-s3/bucket.rb', line 1498

def objects(options = {})
  batches = Enumerator.new do |y|
    options = options.merge(bucket: @name)
    resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
      @client.list_objects_v2(options)
    end
    resp.each_page do |page|
      batch = []
      page.data.contents.each do |c|
        batch << ObjectSummary.new(
          bucket_name: @name,
          key: c.key,
          data: c,
          client: @client
        )
      end
      y.yield(batch)
    end
  end
  ObjectSummary::Collection.new(batches)
end

#policyBucketPolicy

Returns:



1521
1522
1523
1524
1525
1526
# File 'lib/aws-sdk-s3/bucket.rb', line 1521

def policy
  BucketPolicy.new(
    bucket_name: @name,
    client: @client
  )
end

#presigned_post(options = {}) ⇒ PresignedPost

Note:

You must specify ‘:key` or `:key_starts_with`. All other options are optional.

Creates a PresignedPost that makes it easy to upload a file from a web browser direct to Amazon S3 using an HTML post form with a file field.

See the PresignedPost documentation for more information.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

Returns:

See Also:



126
127
128
129
130
131
132
133
# File 'lib/aws-sdk-s3/customizations/bucket.rb', line 126

def presigned_post(options = {})
  PresignedPost.new(
    client.config.credentials,
    client.config.region,
    name,
    { url: url }.merge(options)
  )
end

#put_object(options = {}) ⇒ Object

Examples:

Request syntax with placeholder values


object = bucket.put_object({
  acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
  body: source_file,
  cache_control: "CacheControl",
  content_disposition: "ContentDisposition",
  content_encoding: "ContentEncoding",
  content_language: "ContentLanguage",
  content_length: 1,
  content_md5: "ContentMD5",
  content_type: "ContentType",
  checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
  checksum_crc32: "ChecksumCRC32",
  checksum_crc32c: "ChecksumCRC32C",
  checksum_sha1: "ChecksumSHA1",
  checksum_sha256: "ChecksumSHA256",
  expires: Time.now,
  if_match: "IfMatch",
  if_none_match: "IfNoneMatch",
  grant_full_control: "GrantFullControl",
  grant_read: "GrantRead",
  grant_read_acp: "GrantReadACP",
  grant_write_acp: "GrantWriteACP",
  key: "ObjectKey", # required
  write_offset_bytes: 1,
  metadata: {
    "MetadataKey" => "MetadataValue",
  },
  server_side_encryption: "AES256", # accepts AES256, aws:kms, aws:kms:dsse
  storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS, GLACIER_IR, SNOW, EXPRESS_ONEZONE
  website_redirect_location: "WebsiteRedirectLocation",
  sse_customer_algorithm: "SSECustomerAlgorithm",
  sse_customer_key: "SSECustomerKey",
  sse_customer_key_md5: "SSECustomerKeyMD5",
  ssekms_key_id: "SSEKMSKeyId",
  ssekms_encryption_context: "SSEKMSEncryptionContext",
  bucket_key_enabled: false,
  request_payer: "requester", # accepts requester
  tagging: "TaggingHeader",
  object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
  object_lock_retain_until_date: Time.now,
  object_lock_legal_hold_status: "ON", # accepts ON, OFF
  expected_bucket_owner: "AccountId",
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :acl (String)

    The canned ACL to apply to the object. For more information, see

    Canned ACL][1

    in the *Amazon S3 User Guide*.

    When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see

    Access Control List (ACL) Overview][2

    and [Managing ACLs Using the

    REST API] in the *Amazon S3 User Guide*.

    If the bucket that you’re uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don’t specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the ‘bucket-owner-full-control` canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a `400` error with the error code `AccessControlListNotSupported`. For more information, see [ Controlling ownership of objects and disabling ACLs] in the *Amazon S3 User Guide*.

    <note markdown=“1”> * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL [2]: docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html [3]: docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html [4]: docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html

  • :body (String, StringIO, File)

    Object data.

  • :cache_control (String)

    Can be used to specify caching behavior along the request/reply chain. For more information, see [www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9][1].

    [1]: www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

  • :content_disposition (String)

    Specifies presentational information for the object. For more information, see [www.rfc-editor.org/rfc/rfc6266#section-4][1].

    [1]: www.rfc-editor.org/rfc/rfc6266#section-4

  • :content_encoding (String)

    Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. For more information, see [www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding][1].

    [1]: www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding

  • :content_language (String)

    The language the content is in.

  • :content_length (Integer)

    Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see [www.rfc-editor.org/rfc/rfc9110.html#name-content-length][1].

    [1]: www.rfc-editor.org/rfc/rfc9110.html#name-content-length

  • :content_md5 (String)

    The base64-encoded 128-bit MD5 digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see [REST Authentication].

    <note markdown=“1”> The ‘Content-MD5` or `x-amz-sdk-checksum-algorithm` header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see [Uploading objects to an Object Lock enabled bucket ][2] in the *Amazon S3 User Guide*.

    </note>
    

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object

  • :content_type (String)

    A standard MIME type describing the format of the contents. For more information, see [www.rfc-editor.org/rfc/rfc9110.html#name-content-type][1].

    [1]: www.rfc-editor.org/rfc/rfc9110.html#name-content-type

  • :checksum_algorithm (String)

    Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don’t use the SDK. When you send this header, there must be a corresponding ‘x-amz-checksum-algorithm ` or `x-amz-trailer` header sent. Otherwise, Amazon S3 fails the request with the HTTP status code `400 Bad Request`.

    For the ‘x-amz-checksum-algorithm ` header, replace ` algorithm ` with the supported algorithm from the following list:

    • ‘CRC32`

    • ‘CRC32C`

    • ‘SHA1`

    • ‘SHA256`

    For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    If the individual checksum value you provide through ‘x-amz-checksum-algorithm ` doesn’t match the checksum algorithm you set through ‘x-amz-sdk-checksum-algorithm`, Amazon S3 ignores any provided `ChecksumAlgorithm` parameter and uses the checksum algorithm that matches the provided value in `x-amz-checksum-algorithm `.

    <note markdown=“1”> The ‘Content-MD5` or `x-amz-sdk-checksum-algorithm` header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see [Uploading objects to an Object Lock enabled bucket ][2] in the *Amazon S3 User Guide*.

    </note>
    

    For directory buckets, when you use Amazon Web Services SDKs, ‘CRC32` is the default checksum algorithm that’s used for performance.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object

  • :checksum_crc32 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 32-bit CRC-32 checksum of the object. For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

  • :checksum_crc32c (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 32-bit CRC-32C checksum of the object. For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

  • :checksum_sha1 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 160-bit SHA-1 digest of the object. For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

  • :checksum_sha256 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 256-bit SHA-256 digest of the object. For more information, see [Checking object integrity] in the *Amazon S3 User Guide*.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

  • :expires (Time, DateTime, Date, Integer, String)

    The date and time at which the object is no longer cacheable. For more information, see [www.rfc-editor.org/rfc/rfc7234#section-5.3][1].

    [1]: www.rfc-editor.org/rfc/rfc7234#section-5.3

  • :if_match (String)

    Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a ‘412 Precondition Failed` error.

    If a conflicting operation occurs during the upload S3 returns a ‘409 ConditionalRequestConflict` response. On a 409 failure you should fetch the object’s ETag and retry the upload.

    Expects the ETag value as a string.

    For more information about conditional requests, see [RFC 7232], or

    Conditional requests][2

    in the *Amazon S3 User Guide*.

    [1]: tools.ietf.org/html/rfc7232 [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html

  • :if_none_match (String)

    Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a ‘412 Precondition Failed` error.

    If a conflicting operation occurs during the upload S3 returns a ‘409 ConditionalRequestConflict` response. On a 409 failure you should retry the upload.

    Expects the ‘*’ (asterisk) character.

    For more information about conditional requests, see [RFC 7232], or

    Conditional requests][2

    in the *Amazon S3 User Guide*.

    [1]: tools.ietf.org/html/rfc7232 [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html

  • :grant_full_control (String)

    Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.

    <note markdown=“1”> * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

    </note>
    
  • :grant_read (String)

    Allows grantee to read the object data and its metadata.

    <note markdown=“1”> * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

    </note>
    
  • :grant_read_acp (String)

    Allows grantee to read the object ACL.

    <note markdown=“1”> * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

    </note>
    
  • :grant_write_acp (String)

    Allows grantee to write the ACL for the applicable object.

    <note markdown=“1”> * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

    </note>
    
  • :key (required, String)

    Object key for which the PUT action was initiated.

  • :write_offset_bytes (Integer)

    Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.

    <note markdown=“1”> This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.

    </note>
    
  • :metadata (Hash<String,String>)

    A map of metadata to store with the object in S3.

  • :server_side_encryption (String)

    The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, ‘AES256`, `aws:kms`, `aws:kms:dsse`).

    • General purpose buckets - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see [Using Server-Side Encryption] in the *Amazon S3 User Guide*.

    • Directory buckets - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (‘AES256`) and server-side encryption with KMS keys (SSE-KMS) (`aws:kms`). We recommend that the bucket’s default encryption uses the desired encryption configuration and you don’t override the bucket default encryption in your ‘CreateSession` requests or `PUT` object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see [Protecting data with server-side encryption] in the *Amazon S3 User Guide*. For more information about the encryption overriding behaviors in directory buckets, see [Specifying server-side encryption with KMS for new object uploads].

      In the Zonal endpoint API calls (except [CopyObject] and [UploadPartCopy]) using the REST API, the encryption request headers must match the encryption settings that are specified in the ‘CreateSession` request. You can’t override the values of the encryption settings (‘x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id`, `x-amz-server-side-encryption-context`, and `x-amz-server-side-encryption-bucket-key-enabled`) that are specified in the `CreateSession` request. You don’t need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the ‘CreateSession` request to protect new objects in the directory bucket.

      <note markdown=“1”> When you use the CLI or the Amazon Web Services SDKs, for ‘CreateSession`, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket’s default encryption configuration for the ‘CreateSession` request. It’s not supported to override the encryption settings values in the ‘CreateSession` request. So in the Zonal endpoint API calls (except [CopyObject] and [UploadPartCopy]), the encryption request headers must match the default encryption configuration of the directory bucket.

      </note>
      

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html [2]: docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html [3]: docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html [4]: docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html [5]: docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html

  • :storage_class (String)

    By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see [Storage Classes] in the *Amazon S3 User Guide*.

    <note markdown=“1”> * For directory buckets, only the S3 Express One Zone storage class is

    supported to store newly created objects.
    
    • Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html

  • :website_redirect_location (String)

    If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata. For information about object metadata, see [Object Key and Metadata] in the *Amazon S3 User Guide*.

    In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:

    ‘x-amz-website-redirect-location: /anotherPage.html`

    In the following example, the request header sets the object redirect to another website:

    ‘x-amz-website-redirect-location: www.example.com/`

    For more information about website hosting in Amazon S3, see [Hosting Websites on Amazon S3] and [How to Configure Website Page Redirects] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html [2]: docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html [3]: docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html

  • :sse_customer_algorithm (String)

    Specifies the algorithm to use when encrypting the object (for example, ‘AES256`).

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :sse_customer_key (String)

    Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the ‘x-amz-server-side-encryption-customer-algorithm` header.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :sse_customer_key_md5 (String)

    Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :ssekms_key_id (String)

    Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn’t exist in the same account that’s issuing the command, you must use the full Key ARN not the Key ID.

    **General purpose buckets** - If you specify ‘x-amz-server-side-encryption` with `aws:kms` or `aws:kms:dsse`, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify `x-amz-server-side-encryption:aws:kms` or `x-amz-server-side-encryption:aws:kms:dsse`, but do not provide `x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3 uses the Amazon Web Services managed key (`aws/s3`) to protect the data.

    **Directory buckets** - If you specify ‘x-amz-server-side-encryption` with `aws:kms`, the ` x-amz-server-side-encryption-aws-kms-key-id` header is implicitly assigned the ID of the KMS symmetric encryption customer managed key that’s configured for your directory bucket’s default encryption setting. If you want to specify the ‘ x-amz-server-side-encryption-aws-kms-key-id` header explicitly, you can only specify it with the ID (Key ID or Key ARN) of the KMS customer managed key that’s configured for your directory bucket’s default encryption setting. Otherwise, you get an HTTP ‘400 Bad Request` error. Only use the key ID or key ARN. The key alias format of the KMS key isn’t supported. Your SSE-KMS configuration can only support 1 [customer managed key] per directory bucket for the lifetime of the bucket. The [Amazon Web Services managed key] (‘aws/s3`) isn’t supported.

    [1]: docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk [2]: docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk

  • :ssekms_encryption_context (String)

    Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64-encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future ‘GetObject` operations on this object.

    **General purpose buckets** - This value must be explicitly added during ‘CopyObject` operations if you want an additional encryption context for your object. For more information, see [Encryption context] in the *Amazon S3 User Guide*.

    **Directory buckets** - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.

    [1]: docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context

  • :bucket_key_enabled (Boolean)

    Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).

    **General purpose buckets** - Setting this header to ‘true` causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn’t affect bucket-level settings for S3 Bucket Key.

    **Directory buckets** - S3 Bucket Keys are always enabled for ‘GET` and `PUT` operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren’t supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through [CopyObject], [UploadPartCopy], [the Copy operation in Batch Operations], or [the import jobs]. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.

    [1]: docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html [2]: docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html [3]: docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops [4]: docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see [Downloading Objects in Requester Pays Buckets] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html

  • :tagging (String)

    The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, “Key1=Value1”)

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :object_lock_mode (String)

    The Object Lock mode that you want to apply to this object.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :object_lock_retain_until_date (Time, DateTime, Date, Integer, String)

    The date and time when you want this object’s Object Lock to expire. Must be formatted as a timestamp parameter.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    
  • :object_lock_legal_hold_status (String)

    Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see [Object Lock] in the *Amazon S3 User Guide*.

    <note markdown=“1”> This functionality is not supported for directory buckets.

    </note>
    

    [1]: docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code ‘403 Forbidden` (access denied).

Returns:



1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
# File 'lib/aws-sdk-s3/bucket.rb', line 1091

def put_object(options = {})
  options = options.merge(bucket: @name)
  Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.put_object(options)
  end
  Object.new(
    bucket_name: @name,
    key: options[:key],
    client: @client
  )
end

#request_paymentBucketRequestPayment



1529
1530
1531
1532
1533
1534
# File 'lib/aws-sdk-s3/bucket.rb', line 1529

def request_payment
  BucketRequestPayment.new(
    bucket_name: @name,
    client: @client
  )
end

#taggingBucketTagging

Returns:



1537
1538
1539
1540
1541
1542
# File 'lib/aws-sdk-s3/bucket.rb', line 1537

def tagging
  BucketTagging.new(
    bucket_name: @name,
    client: @client
  )
end

#url(options = {}) ⇒ String

Returns a public URL for this bucket.

It will also work when provided an Access Point ARN.

You can pass ‘virtual_host: true` to use the bucket name as the host name.

bucket = s3.bucket('my-bucket.com')
bucket.url(virtual_host: true)
#=> "http://my-bucket.com"

Examples:


bucket = s3.bucket('bucket-name')
bucket.url
#=> "https://bucket-name.s3.amazonaws.com"

bucket = s3.bucket(
  'arn:aws:s3:us-east-1:123456789012:accesspoint:myendpoint'
)
bucket.url
#=> "https://myendpoint-123456789012.s3-accesspoint.us-west-2.amazonaws.com"

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :virtual_host (Boolean) — default: false

    When ‘true`, the bucket name will be used as the host name. This is useful when you have a CNAME configured for this bucket.

  • :secure (Boolean) — default: true

    When ‘false`, http will be used with virtual_host. This is required when the bucket name has a dot (.) in it.

Returns:

  • (String)

    the URL for this bucket.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/aws-sdk-s3/customizations/bucket.rb', line 88

def url(options = {})
  if options[:virtual_host]
    scheme = options.fetch(:secure, true) ? 'https' : 'http'
    "#{scheme}://#{name}"
  else
    # Taken from Aws::S3::Endpoints module
    unless client.config.regional_endpoint
      endpoint = client.config.endpoint.to_s
    end
    params = Aws::S3::EndpointParameters.new(
      bucket: name,
      region: client.config.region,
      use_fips: client.config.use_fips_endpoint,
      use_dual_stack: client.config.use_dualstack_endpoint,
      endpoint: endpoint,
      force_path_style: client.config.force_path_style,
      accelerate: client.config.use_accelerate_endpoint,
      use_global_endpoint: client.config.s3_us_east_1_regional_endpoint == 'legacy',
      use_object_lambda_endpoint: nil,
      disable_access_points: nil,
      disable_multi_region_access_points: client.config.s3_disable_multiregion_access_points,
      use_arn_region: client.config.s3_use_arn_region,
    )
    endpoint = Aws::S3::EndpointProvider.new.resolve_endpoint(params)
    endpoint.url
  end
end

#versioningBucketVersioning

Returns:



1545
1546
1547
1548
1549
1550
# File 'lib/aws-sdk-s3/bucket.rb', line 1545

def versioning
  BucketVersioning.new(
    bucket_name: @name,
    client: @client
  )
end

#wait_until(options = {}) {|resource| ... } ⇒ Resource

Deprecated.

Use [Aws::S3::Client] #wait_until instead

Note:

The waiting operation is performed on a copy. The original resource remains unchanged.

Waiter polls an API operation until a resource enters a desired state.

## Basic Usage

Waiter will polls until it is successful, it fails by entering a terminal state, or until a maximum number of attempts are made.

# polls in a loop until condition is true
resource.wait_until(options) {|resource| condition}

## Example

instance.wait_until(max_attempts:10, delay:5) do |instance|
  instance.state.name == 'running'
end

## Configuration

You can configure the maximum number of polling attempts, and the delay (in seconds) between each polling attempt. The waiting condition is set by passing a block to #wait_until:

# poll for ~25 seconds
resource.wait_until(max_attempts:5,delay:5) {|resource|...}

## Callbacks

You can be notified before each polling attempt and before each delay. If you throw ‘:success` or `:failure` from these callbacks, it will terminate the waiter.

started_at = Time.now
# poll for 1 hour, instead of a number of attempts
proc = Proc.new do |attempts, response|
  throw :failure if Time.now - started_at > 3600
end

  # disable max attempts
instance.wait_until(before_wait:proc, max_attempts:nil) {...}

## Handling Errors

When a waiter is successful, it returns the Resource. When a waiter fails, it raises an error.

begin
  resource.wait_until(...)
rescue Aws::Waiters::Errors::WaiterFailed
  # resource did not enter the desired state in time
end

attempts attempt in seconds invoked before each attempt invoked before each wait

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :max_attempts (Integer) — default: 10

    Maximum number of

  • :delay (Integer) — default: 10

    Delay between each

  • :before_attempt (Proc) — default: nil

    Callback

  • :before_wait (Proc) — default: nil

    Callback

Yield Parameters:

  • resource (Resource)

    to be used in the waiting condition.

Returns:

  • (Resource)

    if the waiter was successful

Raises:

  • (Aws::Waiters::Errors::FailureStateError)

    Raised when the waiter terminates because the waiter has entered a state that it will not transition out of, preventing success.

    yet successful.

  • (Aws::Waiters::Errors::UnexpectedError)

    Raised when an error is encountered while polling for a resource that is not expected.

  • (NotImplementedError)

    Raised when the resource does not



214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'lib/aws-sdk-s3/bucket.rb', line 214

def wait_until(options = {}, &block)
  self_copy = self.dup
  attempts = 0
  options[:max_attempts] = 10 unless options.key?(:max_attempts)
  options[:delay] ||= 10
  options[:poller] = Proc.new do
    attempts += 1
    if block.call(self_copy)
      [:success, self_copy]
    else
      self_copy.reload unless attempts == options[:max_attempts]
      :retry
    end
  end
  Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    Aws::Waiters::Waiter.new(options).wait({})
  end
end

#wait_until_exists(options = {}, &block) ⇒ Bucket

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :max_attempts (Integer) — default: 20
  • :delay (Float) — default: 5
  • :before_attempt (Proc)
  • :before_wait (Proc)

Returns:



102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/aws-sdk-s3/bucket.rb', line 102

def wait_until_exists(options = {}, &block)
  options, params = separate_params_and_options(options)
  waiter = Waiters::BucketExists.new(options)
  yield_waiter_and_warn(waiter, &block) if block_given?
  Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    waiter.wait(params.merge(bucket: @name))
  end
  Bucket.new({
    name: @name,
    client: @client
  })
end

#wait_until_not_exists(options = {}, &block) ⇒ Bucket

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :max_attempts (Integer) — default: 20
  • :delay (Float) — default: 5
  • :before_attempt (Proc)
  • :before_wait (Proc)

Returns:



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/aws-sdk-s3/bucket.rb', line 121

def wait_until_not_exists(options = {}, &block)
  options, params = separate_params_and_options(options)
  waiter = Waiters::BucketNotExists.new(options)
  yield_waiter_and_warn(waiter, &block) if block_given?
  Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    waiter.wait(params.merge(bucket: @name))
  end
  Bucket.new({
    name: @name,
    client: @client
  })
end

#websiteBucketWebsite

Returns:



1553
1554
1555
1556
1557
1558
# File 'lib/aws-sdk-s3/bucket.rb', line 1553

def website
  BucketWebsite.new(
    bucket_name: @name,
    client: @client
  )
end