%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. -module(aws_s3). -export([abort_multipart_upload/4, abort_multipart_upload/5, complete_multipart_upload/4, complete_multipart_upload/5, copy_object/4, copy_object/5, create_bucket/3, create_bucket/4, create_multipart_upload/4, create_multipart_upload/5, create_session/2, create_session/4, create_session/5, delete_bucket/3, delete_bucket/4, delete_bucket_analytics_configuration/3, delete_bucket_analytics_configuration/4, delete_bucket_cors/3, delete_bucket_cors/4, delete_bucket_encryption/3, delete_bucket_encryption/4, delete_bucket_intelligent_tiering_configuration/3, delete_bucket_intelligent_tiering_configuration/4, delete_bucket_inventory_configuration/3, delete_bucket_inventory_configuration/4, delete_bucket_lifecycle/3, delete_bucket_lifecycle/4, delete_bucket_metrics_configuration/3, delete_bucket_metrics_configuration/4, delete_bucket_ownership_controls/3, delete_bucket_ownership_controls/4, delete_bucket_policy/3, delete_bucket_policy/4, delete_bucket_replication/3, delete_bucket_replication/4, delete_bucket_tagging/3, delete_bucket_tagging/4, delete_bucket_website/3, delete_bucket_website/4, delete_object/4, delete_object/5, delete_object_tagging/4, delete_object_tagging/5, delete_objects/3, delete_objects/4, delete_public_access_block/3, delete_public_access_block/4, get_bucket_accelerate_configuration/2, get_bucket_accelerate_configuration/4, get_bucket_accelerate_configuration/5, get_bucket_acl/2, get_bucket_acl/4, get_bucket_acl/5, get_bucket_analytics_configuration/3, get_bucket_analytics_configuration/5, get_bucket_analytics_configuration/6, get_bucket_cors/2, get_bucket_cors/4, get_bucket_cors/5, get_bucket_encryption/2, get_bucket_encryption/4, get_bucket_encryption/5, get_bucket_intelligent_tiering_configuration/3, get_bucket_intelligent_tiering_configuration/5, get_bucket_intelligent_tiering_configuration/6, get_bucket_inventory_configuration/3, get_bucket_inventory_configuration/5, get_bucket_inventory_configuration/6, get_bucket_lifecycle/2, get_bucket_lifecycle/4, get_bucket_lifecycle/5, get_bucket_lifecycle_configuration/2, get_bucket_lifecycle_configuration/4, get_bucket_lifecycle_configuration/5, get_bucket_location/2, get_bucket_location/4, get_bucket_location/5, get_bucket_logging/2, get_bucket_logging/4, get_bucket_logging/5, get_bucket_metrics_configuration/3, get_bucket_metrics_configuration/5, get_bucket_metrics_configuration/6, get_bucket_notification/2, get_bucket_notification/4, get_bucket_notification/5, get_bucket_notification_configuration/2, get_bucket_notification_configuration/4, get_bucket_notification_configuration/5, get_bucket_ownership_controls/2, get_bucket_ownership_controls/4, get_bucket_ownership_controls/5, get_bucket_policy/2, get_bucket_policy/4, get_bucket_policy/5, get_bucket_policy_status/2, get_bucket_policy_status/4, get_bucket_policy_status/5, get_bucket_replication/2, get_bucket_replication/4, get_bucket_replication/5, get_bucket_request_payment/2, get_bucket_request_payment/4, get_bucket_request_payment/5, get_bucket_tagging/2, get_bucket_tagging/4, get_bucket_tagging/5, get_bucket_versioning/2, get_bucket_versioning/4, get_bucket_versioning/5, get_bucket_website/2, get_bucket_website/4, get_bucket_website/5, get_object/3, get_object/5, get_object/6, get_object_acl/3, get_object_acl/5, get_object_acl/6, get_object_attributes/4, get_object_attributes/6, get_object_attributes/7, get_object_legal_hold/3, get_object_legal_hold/5, get_object_legal_hold/6, get_object_lock_configuration/2, get_object_lock_configuration/4, get_object_lock_configuration/5, get_object_retention/3, get_object_retention/5, get_object_retention/6, get_object_tagging/3, get_object_tagging/5, get_object_tagging/6, get_object_torrent/3, get_object_torrent/5, get_object_torrent/6, get_public_access_block/2, get_public_access_block/4, get_public_access_block/5, head_bucket/3, head_bucket/4, head_object/4, head_object/5, list_bucket_analytics_configurations/2, list_bucket_analytics_configurations/4, list_bucket_analytics_configurations/5, list_bucket_intelligent_tiering_configurations/2, list_bucket_intelligent_tiering_configurations/4, list_bucket_intelligent_tiering_configurations/5, list_bucket_inventory_configurations/2, list_bucket_inventory_configurations/4, list_bucket_inventory_configurations/5, list_bucket_metrics_configurations/2, list_bucket_metrics_configurations/4, list_bucket_metrics_configurations/5, list_buckets/1, list_buckets/3, list_buckets/4, list_directory_buckets/1, list_directory_buckets/3, list_directory_buckets/4, list_multipart_uploads/2, list_multipart_uploads/4, list_multipart_uploads/5, list_object_versions/2, list_object_versions/4, list_object_versions/5, list_objects/2, list_objects/4, list_objects/5, list_objects_v2/2, list_objects_v2/4, list_objects_v2/5, list_parts/4, list_parts/6, list_parts/7, put_bucket_accelerate_configuration/3, put_bucket_accelerate_configuration/4, put_bucket_acl/3, put_bucket_acl/4, put_bucket_analytics_configuration/3, put_bucket_analytics_configuration/4, put_bucket_cors/3, put_bucket_cors/4, put_bucket_encryption/3, put_bucket_encryption/4, put_bucket_intelligent_tiering_configuration/3, put_bucket_intelligent_tiering_configuration/4, put_bucket_inventory_configuration/3, put_bucket_inventory_configuration/4, put_bucket_lifecycle/3, put_bucket_lifecycle/4, put_bucket_lifecycle_configuration/3, put_bucket_lifecycle_configuration/4, put_bucket_logging/3, put_bucket_logging/4, put_bucket_metrics_configuration/3, put_bucket_metrics_configuration/4, put_bucket_notification/3, put_bucket_notification/4, put_bucket_notification_configuration/3, put_bucket_notification_configuration/4, put_bucket_ownership_controls/3, put_bucket_ownership_controls/4, put_bucket_policy/3, put_bucket_policy/4, put_bucket_replication/3, put_bucket_replication/4, put_bucket_request_payment/3, put_bucket_request_payment/4, put_bucket_tagging/3, put_bucket_tagging/4, put_bucket_versioning/3, put_bucket_versioning/4, put_bucket_website/3, put_bucket_website/4, put_object/4, put_object/5, put_object_acl/4, put_object_acl/5, put_object_legal_hold/4, put_object_legal_hold/5, put_object_lock_configuration/3, put_object_lock_configuration/4, put_object_retention/4, put_object_retention/5, put_object_tagging/4, put_object_tagging/5, put_public_access_block/3, put_public_access_block/4, restore_object/4, restore_object/5, select_object_content/4, select_object_content/5, upload_part/4, upload_part/5, upload_part_copy/4, upload_part_copy/5, write_get_object_response/2, write_get_object_response/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc This operation aborts a multipart upload. %% %% After a multipart upload is aborted, no additional parts can be uploaded %% using that upload ID. The storage consumed by any previously uploaded %% parts will be freed. However, if any part uploads are currently in %% progress, those part uploads might or might not succeed. As a result, it %% might be necessary to abort a given multipart upload multiple times in %% order to completely free all storage consumed by all parts. %% %% To verify that all parts have been removed and prevent getting charged for %% the part storage, you should call the ListParts: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html API %% operation and ensure that the parts list is empty. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to %% `AbortMultipartUpload': %% %% abort_multipart_upload(Client, Bucket, Key, Input) -> abort_multipart_upload(Client, Bucket, Key, Input, []). abort_multipart_upload(Client, Bucket, Key, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"uploadId">>, <<"UploadId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Completes a multipart upload by assembling previously uploaded parts. %% %% You first initiate the multipart upload and then upload all parts using %% the UploadPart: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html %% operation or the UploadPartCopy: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html %% operation. After successfully uploading all relevant parts of an upload, %% you call this `CompleteMultipartUpload' operation to complete the %% upload. Upon receiving this request, Amazon S3 concatenates all the parts %% in ascending order by part number to create a new object. In the %% CompleteMultipartUpload request, you must provide the parts list and %% ensure that the parts list is complete. The CompleteMultipartUpload API %% operation concatenates the parts that you provide in the list. For each %% part in the list, you must provide the `PartNumber' value and the %% `ETag' value that are returned after that part was uploaded. %% %% The processing of a CompleteMultipartUpload request could take several %% minutes to finalize. After Amazon S3 begins processing the request, it %% sends an HTTP response header that specifies a `200 OK' response. %% While processing is in progress, Amazon S3 periodically sends white space %% characters to keep the connection from timing out. A request could fail %% after the initial `200 OK' response has been sent. This means that a %% `200 OK' response can contain either a success or an error. The error %% response might be embedded in the `200 OK' response. If you call this %% API operation directly, make sure to design your application to parse the %% contents of the response and handle it appropriately. If you use Amazon %% Web Services SDKs, SDKs handle this condition. The SDKs detect the %% embedded error and apply error handling per your configuration settings %% (including automatically retrying the request as appropriate). If the %% condition persists, the SDKs throw an exception (or, for the SDKs that %% don't use exceptions, they return an error). %% %% Note that if `CompleteMultipartUpload' fails, applications should be %% prepared to retry the failed requests. For more information, see Amazon S3 %% Error Best Practices: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html. %% %% You can't use `Content-Type: application/x-www-form-urlencoded' %% for the CompleteMultipartUpload requests. Also, if you don't provide a %% `Content-Type' header, `CompleteMultipartUpload' can still return %% a `200 OK' response. %% %% For more information about multipart uploads, see Uploading Objects Using %% Multipart Upload: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html in %% the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Special errors
HTTP Host header syntax
%% Directory buckets - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to %% `CompleteMultipartUpload': %% %% complete_multipart_upload(Client, Bucket, Key, Input) -> complete_multipart_upload(Client, Bucket, Key, Input, []). complete_multipart_upload(Client, Bucket, Key, Input0, Options0) -> Method = post, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"uploadId">>, <<"UploadId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Creates a copy of an object that is already stored in Amazon S3. %% %% You can store individual objects of up to 5 TB in Amazon S3. You create a %% copy of your object up to 5 GB in size in a single atomic action using %% this API. However, to copy an object greater than 5 GB, you must use the %% multipart upload Upload Part - Copy (UploadPartCopy) API. For more %% information, see Copy Object Using the REST Multipart Upload API: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html. %% %% You can copy individual objects between general purpose buckets, between %% directory buckets, and between general purpose buckets and directory %% buckets. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %% Both the Region that you want to copy the object from and the Region that %% you want to copy the object to must be enabled for your account. %% %% Amazon S3 transfer acceleration does not support cross-Region copies. If %% you request a cross-Region copy using a transfer acceleration endpoint, %% you get a `400 Bad Request' error. For more information, see Transfer %% Acceleration: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html. %% %%
Authentication and authorization
All `CopyObject' %% requests must be authenticated and signed by using IAM credentials (access %% key ID and secret access key for the IAM identities). All headers with the %% `x-amz-' prefix, including `x-amz-copy-source', must be signed. %% For more information, see REST Authentication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html. %% %% Directory buckets - You must use the IAM credentials to authenticate and %% authorize your access to the `CopyObject' API operation, instead of %% using the temporary security credentials through the `CreateSession' %% API operation. %% %% Amazon Web Services CLI or SDKs handles authentication and authorization %% on your behalf. %% %%
Permissions
You must have read access to the source %% object and write access to the destination bucket. %% %%
Response and special errors
When the %% request is an HTTP 1.1 request, the response is chunk encoded. When the %% request is not an HTTP 1.1 request, the response would not contain the %% `Content-Length'. You always need to read the entire response body to %% check if the copy succeeds. to keep the connection alive while we copy the %% data. %% %%
Charge
The copy request charge %% is based on the storage class and Region that you specify for the %% destination object. The request can also result in a data retrieval charge %% for the source if the source storage class bills for data retrieval. For %% pricing information, see Amazon S3 pricing: %% http://aws.amazon.com/s3/pricing/. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `CopyObject': %% %% copy_object(Client, Bucket, Key, Input) -> copy_object(Client, Bucket, Key, Input, []). copy_object(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-copy-source-server-side-encryption-customer-algorithm">>, <<"CopySourceSSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-copy-source">>, <<"CopySource">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"Content-Type">>, <<"ContentType">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-tagging">>, <<"Tagging">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-copy-source-server-side-encryption-customer-key">>, <<"CopySourceSSECustomerKey">>}, {<<"x-amz-website-redirect-location">>, <<"WebsiteRedirectLocation">>}, {<<"Content-Language">>, <<"ContentLanguage">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"Content-Encoding">>, <<"ContentEncoding">>}, {<<"x-amz-copy-source-server-side-encryption-customer-key-MD5">>, <<"CopySourceSSECustomerKeyMD5">>}, {<<"x-amz-copy-source-if-match">>, <<"CopySourceIfMatch">>}, {<<"x-amz-copy-source-if-unmodified-since">>, <<"CopySourceIfUnmodifiedSince">>}, {<<"Expires">>, <<"Expires">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-source-expected-bucket-owner">>, <<"ExpectedSourceBucketOwner">>}, {<<"x-amz-metadata-directive">>, <<"MetadataDirective">>}, {<<"x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-copy-source-if-modified-since">>, <<"CopySourceIfModifiedSince">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"x-amz-tagging-directive">>, <<"TaggingDirective">>}, {<<"x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"Content-Disposition">>, <<"ContentDisposition">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-copy-source-if-none-match">>, <<"CopySourceIfNoneMatch">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeadersMapping = [ {<<"x-amz-meta-">>, <<"Metadata">>} ], {CustomHeaders, Input2} = aws_request:build_custom_headers(CustomHeadersMapping, Input1), Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-copy-source-version-id">>, <<"CopySourceVersionId">>}, {<<"x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This action creates an Amazon S3 bucket. %% %% To create an Amazon S3 on Outposts bucket, see `CreateBucket' : %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html. %% %% Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and %% have a valid Amazon Web Services Access Key ID to authenticate requests. %% Anonymous requests are never allowed to create buckets. By creating the %% bucket, you become the bucket owner. %% %% There are two types of buckets: general purpose buckets and directory %% buckets. For more information about these bucket types, see Creating, %% configuring, and working with Amazon S3 buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html %% in the Amazon S3 User Guide. %% %% General purpose buckets - If you send your `CreateBucket' request to %% the `s3.amazonaws.com' global endpoint, the request goes to the %% `us-east-1' Region. So the signature calculations in Signature Version %% 4 must use `us-east-1' as the Region, even if the location constraint %% in the request specifies another Region where the bucket is to be created. %% If you create a bucket in a Region other than US East (N. Virginia), your %% application must be able to handle 307 redirect. For more information, see %% Virtual hosting of buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html in the %% Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is %% `s3express-control.region.amazonaws.com'. %% %%
The following operations are related to `CreateBucket': %% %% create_bucket(Client, Bucket, Input) -> create_bucket(Client, Bucket, Input, []). create_bucket(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>}, {<<"x-amz-grant-write">>, <<"GrantWrite">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>}, {<<"x-amz-bucket-object-lock-enabled">>, <<"ObjectLockEnabledForBucket">>}, {<<"x-amz-object-ownership">>, <<"ObjectOwnership">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"Location">>, <<"Location">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This action initiates a multipart upload and returns an upload ID. %% %% This upload ID is used to associate all of the parts in the specific %% multipart upload. You specify this upload ID in each of your subsequent %% upload part requests (see UploadPart: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html). You %% also include this upload ID in the final request to either complete or %% abort the multipart upload request. For more information about multipart %% uploads, see Multipart Upload Overview: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html in the %% Amazon S3 User Guide. %% %% After you initiate a multipart upload and upload one or more parts, to %% stop being charged for storing the uploaded parts, you must either %% complete or abort the multipart upload. Amazon S3 frees up the space used %% to store the parts and stops charging you for storing them only after you %% either complete or abort a multipart upload. %% %% If you have configured a lifecycle rule to abort incomplete multipart %% uploads, the created multipart upload must be completed within the number %% of days specified in the bucket lifecycle configuration. Otherwise, the %% incomplete multipart upload becomes eligible for an abort action and %% Amazon S3 aborts the multipart upload. For more information, see Aborting %% Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config. %% %% Directory buckets - S3 Lifecycle is not supported by directory buckets. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Request signing
For request signing, multipart upload %% is just a series of regular requests. You initiate a multipart upload, %% send one or more requests to upload parts, and then complete the multipart %% upload process. You sign each request individually. There is nothing %% special about signing multipart upload requests. For more information %% about signing, see Authenticating Requests (Amazon Web Services Signature %% Version 4): %% https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html %% in the Amazon S3 User Guide. %% %%
Permissions
Encryption
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to %% `CreateMultipartUpload': %% %% create_multipart_upload(Client, Bucket, Key, Input) -> create_multipart_upload(Client, Bucket, Key, Input, []). create_multipart_upload(Client, Bucket, Key, Input0, Options0) -> Method = post, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?uploads"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-Disposition">>, <<"ContentDisposition">>}, {<<"Content-Encoding">>, <<"ContentEncoding">>}, {<<"Content-Language">>, <<"ContentLanguage">>}, {<<"Content-Type">>, <<"ContentType">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"Expires">>, <<"Expires">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>}, {<<"x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-tagging">>, <<"Tagging">>}, {<<"x-amz-website-redirect-location">>, <<"WebsiteRedirectLocation">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeadersMapping = [ {<<"x-amz-meta-">>, <<"Metadata">>} ], {CustomHeaders, Input2} = aws_request:build_custom_headers(CustomHeadersMapping, Input1), Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-abort-date">>, <<"AbortDate">>}, {<<"x-amz-abort-rule-id">>, <<"AbortRuleId">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Creates a session that establishes temporary security credentials to %% support fast authentication and authorization for the Zonal endpoint APIs %% on directory buckets. %% %% For more information about Zonal endpoint APIs that include the %% Availability Zone in the request endpoint, see S3 Express One Zone APIs: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-APIs.html %% in the Amazon S3 User Guide. %% %% To make Zonal endpoint API requests on a directory bucket, use the %% `CreateSession' API operation. Specifically, you grant %% `s3express:CreateSession' permission to a bucket in a bucket policy or %% an IAM identity-based policy. Then, you use IAM credentials to make the %% `CreateSession' API request on the bucket, which returns temporary %% security credentials that include the access key ID, secret access key, %% session token, and expiration. These credentials have associated %% permissions to access the Zonal endpoint APIs. After the session is %% created, you don’t need to use other policies to grant permissions to each %% Zonal endpoint API individually. Instead, in your Zonal endpoint API %% requests, you sign your requests by applying the temporary security %% credentials of the session to the request headers and following the SigV4 %% protocol for authentication. You also apply the session token to the %% `x-amz-s3session-token' request header for authorization. Temporary %% security credentials are scoped to the bucket and expire after 5 minutes. %% After the expiration time, any calls that you make with those credentials %% will fail. You must use IAM credentials again to make a %% `CreateSession' API request that generates a new set of temporary %% credentials for use. Temporary credentials cannot be extended or refreshed %% beyond the original specified interval. %% %% If you use Amazon Web Services SDKs, SDKs handle the session token %% refreshes automatically to avoid service interruptions when a session %% expires. We recommend that you use the Amazon Web Services SDKs to %% initiate and manage requests to the CreateSession API. For more %% information, see Performance guidelines and design patterns: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-optimizing-performance-guidelines-design-patterns.html#s3-express-optimizing-performance-session-authentication %% in the Amazon S3 User Guide. %% %% You must make requests for this API operation to the Zonal endpoint. These %% endpoints support virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com'. Path-style %% requests are not supported. For more information, see Regional and Zonal %% endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %% `CopyObject' API operation - Unlike other Zonal endpoint APIs, the %% `CopyObject' API operation doesn't use the temporary security %% credentials returned from the `CreateSession' API operation for %% authentication and authorization. For information about authentication and %% authorization of the `CopyObject' API operation on directory buckets, %% see CopyObject: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html. %% %% `HeadBucket' API operation - Unlike other Zonal endpoint APIs, the %% `HeadBucket' API operation doesn't use the temporary security %% credentials returned from the `CreateSession' API operation for %% authentication and authorization. For information about authentication and %% authorization of the `HeadBucket' API operation on directory buckets, %% see HeadBucket: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html. %% %%
Permissions
To obtain temporary security credentials, %% you must create a bucket policy or an IAM identity-based policy that %% grants `s3express:CreateSession' permission to the bucket. In a %% policy, you can have the `s3express:SessionMode' condition key to %% control who can create a `ReadWrite' or `ReadOnly' session. For %% more information about `ReadWrite' or `ReadOnly' sessions, see %% `x-amz-create-session-mode' : %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestParameters. %% For example policies, see Example bucket policies for S3 Express One Zone: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html %% and Amazon Web Services Identity and Access Management (IAM) %% identity-based policies for S3 Express One Zone: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html %% in the Amazon S3 User Guide. %% %% To grant cross-account access to Zonal endpoint APIs, the bucket policy %% should also grant both accounts the `s3express:CreateSession' %% permission. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
create_session(Client, Bucket) when is_map(Client) -> create_session(Client, Bucket, #{}, #{}). create_session(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> create_session(Client, Bucket, QueryMap, HeadersMap, []). create_session(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?session"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-create-session-mode">>, maps:get(<<"x-amz-create-session-mode">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc Deletes the S3 bucket. %% %% All objects (including all object versions and delete markers) in the %% bucket must be deleted before the bucket itself can be deleted. %% %% Directory buckets - If multipart uploads in a directory bucket are in %% progress, you can't delete the bucket until all the in-progress %% multipart uploads are aborted or completed. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is %% `s3express-control.region.amazonaws.com'. %% %%
The following operations are related to `DeleteBucket': %% %% delete_bucket(Client, Bucket, Input) -> delete_bucket(Client, Bucket, Input, []). delete_bucket(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), ""], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes an analytics configuration for the bucket (specified by the %% analytics configuration ID). %% %% To use this operation, you must have permissions to perform the %% `s3:PutAnalyticsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about the Amazon S3 analytics feature, see Amazon S3 %% Analytics – Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html. %% %% The following operations are related to %% `DeleteBucketAnalyticsConfiguration': %% %% delete_bucket_analytics_configuration(Client, Bucket, Input) -> delete_bucket_analytics_configuration(Client, Bucket, Input, []). delete_bucket_analytics_configuration(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?analytics"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes the `cors' configuration information set for the bucket. %% %% To use this operation, you must have permission to perform the %% `s3:PutBucketCORS' action. The bucket owner has this permission by %% default and can grant this permission to others. %% %% For information about `cors', see Enabling Cross-Origin Resource %% Sharing: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html in the %% Amazon S3 User Guide. %% %% == Related Resources == %% %% delete_bucket_cors(Client, Bucket, Input) -> delete_bucket_cors(Client, Bucket, Input, []). delete_bucket_cors(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?cors"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This implementation of the DELETE action resets the default encryption for %% the bucket as server-side encryption with Amazon S3 managed keys (SSE-S3). %% For information about the bucket default encryption feature, see Amazon S3 %% Bucket Default Encryption: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html in %% the Amazon S3 User Guide. %% %% To use this operation, you must have permissions to perform the %% `s3:PutEncryptionConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %% The following operations are related to `DeleteBucketEncryption': %% %% delete_bucket_encryption(Client, Bucket, Input) -> delete_bucket_encryption(Client, Bucket, Input, []). delete_bucket_encryption(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?encryption"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes the S3 Intelligent-Tiering configuration from the specified %% bucket. %% %% The S3 Intelligent-Tiering storage class is designed to optimize storage %% costs by automatically moving data to the most cost-effective storage %% access tier, without performance impact or operational overhead. S3 %% Intelligent-Tiering delivers automatic cost savings in three low latency %% and high throughput access tiers. To get the lowest storage cost on data %% that can be accessed in minutes to hours, you can choose to activate %% additional archiving capabilities. %% %% The S3 Intelligent-Tiering storage class is the ideal storage class for %% data with unknown, changing, or unpredictable access patterns, independent %% of object size or retention period. If the size of an object is less than %% 128 KB, it is not monitored and not eligible for auto-tiering. Smaller %% objects can be stored, but they are always charged at the Frequent Access %% tier rates in the S3 Intelligent-Tiering storage class. %% %% For more information, see Storage class for automatically optimizing %% frequently and infrequently accessed objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access. %% %% Operations related to `DeleteBucketIntelligentTieringConfiguration' %% include: %% %% delete_bucket_intelligent_tiering_configuration(Client, Bucket, Input) -> delete_bucket_intelligent_tiering_configuration(Client, Bucket, Input, []). delete_bucket_intelligent_tiering_configuration(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?intelligent-tiering"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], Headers = [], Input1 = Input0, CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes an inventory configuration (identified by the inventory ID) from %% the bucket. %% %% To use this operation, you must have permissions to perform the %% `s3:PutInventoryConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about the Amazon S3 inventory feature, see Amazon S3 %% Inventory: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html. %% %% Operations related to `DeleteBucketInventoryConfiguration' include: %% %% delete_bucket_inventory_configuration(Client, Bucket, Input) -> delete_bucket_inventory_configuration(Client, Bucket, Input, []). delete_bucket_inventory_configuration(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?inventory"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes the lifecycle configuration from the specified bucket. Amazon S3 %% removes all the lifecycle configuration rules in the lifecycle subresource %% associated with the bucket. Your objects never expire, and Amazon S3 no %% longer automatically deletes any objects on the basis of rules contained %% in the deleted lifecycle configuration. %% %% To use this operation, you must have permission to perform the %% `s3:PutLifecycleConfiguration' action. By default, the bucket owner %% has this permission and the bucket owner can grant this permission to %% others. %% %% There is usually some time lag before lifecycle configuration deletion is %% fully propagated to all the Amazon S3 systems. %% %% For more information about the object expiration, see Elements to Describe %% Lifecycle Actions: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions. %% %% Related actions include: %% %% delete_bucket_lifecycle(Client, Bucket, Input) -> delete_bucket_lifecycle(Client, Bucket, Input, []). delete_bucket_lifecycle(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?lifecycle"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes a metrics configuration for the Amazon CloudWatch request metrics %% (specified by the metrics configuration ID) from the bucket. Note that %% this doesn't include the daily storage metrics. %% %% To use this operation, you must have permissions to perform the %% `s3:PutMetricsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about CloudWatch request metrics for Amazon S3, see %% Monitoring Metrics with Amazon CloudWatch: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html. %% %% The following operations are related to %% `DeleteBucketMetricsConfiguration': %% %% delete_bucket_metrics_configuration(Client, Bucket, Input) -> delete_bucket_metrics_configuration(Client, Bucket, Input, []). delete_bucket_metrics_configuration(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?metrics"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Removes `OwnershipControls' for an Amazon S3 bucket. To use this %% operation, you must have the `s3:PutBucketOwnershipControls' %% permission. For more information about Amazon S3 permissions, see %% Specifying Permissions in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html. %% %% For information about Amazon S3 Object Ownership, see Using Object %% Ownership: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html. %% %% The following operations are related to %% `DeleteBucketOwnershipControls': %% %% delete_bucket_ownership_controls(Client, Bucket, Input) -> delete_bucket_ownership_controls(Client, Bucket, Input, []). delete_bucket_ownership_controls(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?ownershipControls"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc Deletes the policy of a specified bucket. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
If you are using an identity other than the %% root user of the Amazon Web Services account that owns the bucket, the %% calling identity must both have the `DeleteBucketPolicy' permissions %% on the specified bucket and belong to the bucket owner's account in %% order to use this operation. %% %% If you don't have `DeleteBucketPolicy' permissions, Amazon S3 %% returns a `403 Access Denied' error. If you have the correct %% permissions, but you're not using an identity that belongs to the %% bucket owner's account, Amazon S3 returns a `405 Method Not %% Allowed' error. %% %% To ensure that bucket owners don't inadvertently lock themselves out %% of their own buckets, the root principal in a bucket owner's Amazon %% Web Services account can perform the `GetBucketPolicy', %% `PutBucketPolicy', and `DeleteBucketPolicy' API actions, even if %% their bucket policy explicitly denies the root principal's access. %% Bucket owner root principals can only be blocked from performing these API %% actions by VPC endpoint policies and Amazon Web Services Organizations %% policies. %% %%
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is %% `s3express-control.region.amazonaws.com'. %% %%
The following operations are related to %% `DeleteBucketPolicy' %% %% delete_bucket_policy(Client, Bucket, Input) -> delete_bucket_policy(Client, Bucket, Input, []). delete_bucket_policy(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?policy"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes the replication configuration from the bucket. %% %% To use this operation, you must have permissions to perform the %% `s3:PutReplicationConfiguration' action. The bucket owner has these %% permissions by default and can grant it to others. For more information %% about permissions, see Permissions Related to Bucket Subresource %% Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% It can take a while for the deletion of a replication configuration to %% fully propagate. %% %% For information about replication configuration, see Replication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html in the %% Amazon S3 User Guide. %% %% The following operations are related to `DeleteBucketReplication': %% %% delete_bucket_replication(Client, Bucket, Input) -> delete_bucket_replication(Client, Bucket, Input, []). delete_bucket_replication(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?replication"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Deletes the tags from the bucket. %% %% To use this operation, you must have permission to perform the %% `s3:PutBucketTagging' action. By default, the bucket owner has this %% permission and can grant this permission to others. %% %% The following operations are related to `DeleteBucketTagging': %% %% delete_bucket_tagging(Client, Bucket, Input) -> delete_bucket_tagging(Client, Bucket, Input, []). delete_bucket_tagging(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?tagging"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This action removes the website configuration for a bucket. Amazon S3 %% returns a `200 OK' response upon successfully deleting a website %% configuration on the specified bucket. You will get a `200 OK' %% response if the website configuration you are trying to delete does not %% exist on the bucket. Amazon S3 returns a `404' response if the bucket %% specified in the request does not exist. %% %% This DELETE action requires the `S3:DeleteBucketWebsite' permission. %% By default, only the bucket owner can delete the website configuration %% attached to a bucket. However, bucket owners can grant other users %% permission to delete the website configuration by writing a bucket policy %% granting them the `S3:DeleteBucketWebsite' permission. %% %% For more information about hosting websites, see Hosting Websites on %% Amazon S3: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html. %% %% The following operations are related to `DeleteBucketWebsite': %% %% delete_bucket_website(Client, Bucket, Input) -> delete_bucket_website(Client, Bucket, Input, []). delete_bucket_website(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?website"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc Removes an object from a bucket. %% %% The behavior depends on the bucket's versioning state: %% %% Directory buckets - S3 Versioning isn't enabled and %% supported for directory buckets. For this API operation, only the %% `null' value of the version ID is supported by directory buckets. You %% can only specify `null' to the `versionId' query parameter in the %% request. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %% To remove a specific version, you must use the `versionId' query %% parameter. Using this query parameter permanently deletes the version. If %% the object deleted is a delete marker, Amazon S3 sets the response header %% `x-amz-delete-marker' to true. %% %% If the object you want to delete is in a bucket where the bucket %% versioning configuration is MFA Delete enabled, you must include the %% `x-amz-mfa' request header in the DELETE `versionId' request. %% Requests that include `x-amz-mfa' must use HTTPS. For more information %% about MFA Delete, see Using MFA Delete: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html in the %% Amazon S3 User Guide. To see sample requests that use versioning, see %% Sample Request: %% https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete. %% %% Directory buckets - MFA delete is not supported by directory buckets. %% %% You can delete objects by explicitly calling DELETE Object or calling %% (PutBucketLifecycle: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html) %% to enable Amazon S3 to remove them for you. If you want to block users or %% accounts from removing or deleting objects from your bucket, you must deny %% them the `s3:DeleteObject', `s3:DeleteObjectVersion', and %% `s3:PutLifeCycleConfiguration' actions. %% %% Directory buckets - S3 Lifecycle is not supported by directory buckets. %% %%
Permissions
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following action is related to `DeleteObject': %% %% delete_object(Client, Bucket, Key, Input) -> delete_object(Client, Bucket, Key, Input, []). delete_object(Client, Bucket, Key, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-bypass-governance-retention">>, <<"BypassGovernanceRetention">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-mfa">>, <<"MFA">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-delete-marker">>, <<"DeleteMarker">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Removes the entire tag set from the specified object. For more information %% about managing object tags, see Object Tagging: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html. %% %% To use this operation, you must have permission to perform the %% `s3:DeleteObjectTagging' action. %% %% To delete tags of a specific object version, add the `versionId' query %% parameter in the request. You will need permission for the %% `s3:DeleteObjectVersionTagging' action. %% %% The following operations are related to `DeleteObjectTagging': %% %% delete_object_tagging(Client, Bucket, Key, Input) -> delete_object_tagging(Client, Bucket, Key, Input, []). delete_object_tagging(Client, Bucket, Key, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?tagging"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation enables you to delete multiple objects from a bucket %% using a single HTTP request. %% %% If you know the object keys that you want to delete, then this operation %% provides a suitable alternative to sending individual delete requests, %% reducing per-request overhead. %% %% The request can contain a list of up to 1000 keys that you want to delete. %% In the XML, you provide the object key names, and optionally, version IDs %% if you want to delete a specific version of the object from a %% versioning-enabled bucket. For each key, Amazon S3 performs a delete %% operation and returns the result of that delete, success or failure, in %% the response. Note that if the object specified in the request is not %% found, Amazon S3 returns the result as deleted. %% %% Directory buckets - S3 Versioning isn't enabled and supported for %% directory buckets. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %% The operation supports two modes for the response: verbose and quiet. By %% default, the operation uses verbose mode in which the response includes %% the result of deletion of each key in your request. In quiet mode the %% response includes only keys where the delete operation encountered an %% error. For a successful deletion in a quiet mode, the operation does not %% return any information about the delete in the response body. %% %% When performing this action on an MFA Delete enabled bucket, that attempts %% to delete any versioned objects, you must include an MFA token. If you do %% not provide one, the entire request will fail, even if there are %% non-versioned objects you are trying to delete. If you provide an invalid %% token, whether there are versioned keys in the request or not, the entire %% Multi-Object Delete request will fail. For information about MFA Delete, %% see MFA Delete: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete %% in the Amazon S3 User Guide. %% %% Directory buckets - MFA delete is not supported by directory buckets. %% %%
Permissions
Content-MD5 request header
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `DeleteObjects': %% %% delete_objects(Client, Bucket, Input) -> delete_objects(Client, Bucket, Input, []). delete_objects(Client, Bucket, Input0, Options0) -> Method = post, Path = ["/", aws_util:encode_uri(Bucket), "?delete"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, true} | Options0], HeadersMapping = [ {<<"x-amz-bypass-governance-retention">>, <<"BypassGovernanceRetention">>}, {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-mfa">>, <<"MFA">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Removes the `PublicAccessBlock' configuration for an Amazon S3 bucket. %% To use this operation, you must have the %% `s3:PutBucketPublicAccessBlock' permission. For more information about %% permissions, see Permissions Related to Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% The following operations are related to `DeletePublicAccessBlock': %% %% delete_public_access_block(Client, Bucket, Input) -> delete_public_access_block(Client, Bucket, Input, []). delete_public_access_block(Client, Bucket, Input0, Options0) -> Method = delete, Path = ["/", aws_util:encode_uri(Bucket), "?publicAccessBlock"], SuccessStatusCode = 204, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This implementation of the GET action uses the `accelerate' %% subresource to return the Transfer Acceleration state of a bucket, which %% is either `Enabled' or `Suspended'. Amazon S3 Transfer %% Acceleration is a bucket-level feature that enables you to perform faster %% data transfers to and from Amazon S3. %% %% To use this operation, you must have permission to perform the %% `s3:GetAccelerateConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %% You set the Transfer Acceleration state of an existing bucket to %% `Enabled' or `Suspended' by using the %% PutBucketAccelerateConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html %% operation. %% %% A GET `accelerate' request does not return a state value for a bucket %% that has no transfer acceleration state. A bucket has no Transfer %% Acceleration state if a state has never been set on the bucket. %% %% For more information about transfer acceleration, see Transfer %% Acceleration: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html %% in the Amazon S3 User Guide. %% %% The following operations are related to %% `GetBucketAccelerateConfiguration': %% %% get_bucket_accelerate_configuration(Client, Bucket) when is_map(Client) -> get_bucket_accelerate_configuration(Client, Bucket, #{}, #{}). get_bucket_accelerate_configuration(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_accelerate_configuration(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_accelerate_configuration(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?accelerate"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% This implementation of the `GET' action uses the `acl' subresource %% to return the access control list (ACL) of a bucket. To use `GET' to %% return the ACL of the bucket, you must have the `READ_ACP' access to %% the bucket. If `READ_ACP' permission is granted to the anonymous user, %% you can return the ACL of the bucket without using an authorization %% header. %% %% When you use this API operation with an access point, provide the alias of %% the access point in place of the bucket name. %% %% When you use this API operation with an Object Lambda access point, %% provide the alias of the Object Lambda access point in place of the bucket %% name. If the Object Lambda access point alias in a request is not valid, %% the error code `InvalidAccessPointAliasError' is returned. For more %% information about `InvalidAccessPointAliasError', see List of Error %% Codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList. %% %% If your bucket uses the bucket owner enforced setting for S3 Object %% Ownership, requests to read ACLs are still supported and return the %% `bucket-owner-full-control' ACL with the owner being the account that %% created the bucket. For more information, see Controlling object ownership %% and disabling ACLs: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html %% in the Amazon S3 User Guide. %% %% The following operations are related to `GetBucketAcl': %% %% get_bucket_acl(Client, Bucket) when is_map(Client) -> get_bucket_acl(Client, Bucket, #{}, #{}). get_bucket_acl(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_acl(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_acl(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?acl"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This implementation of the GET action returns an analytics configuration %% (identified by the analytics configuration ID) from the bucket. %% %% To use this operation, you must have permissions to perform the %% `s3:GetAnalyticsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %% For information about Amazon S3 analytics feature, see Amazon S3 Analytics %% – Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html %% in the Amazon S3 User Guide. %% %% The following operations are related to %% `GetBucketAnalyticsConfiguration': %% %% get_bucket_analytics_configuration(Client, Bucket, Id) when is_map(Client) -> get_bucket_analytics_configuration(Client, Bucket, Id, #{}, #{}). get_bucket_analytics_configuration(Client, Bucket, Id, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_analytics_configuration(Client, Bucket, Id, QueryMap, HeadersMap, []). get_bucket_analytics_configuration(Client, Bucket, Id, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?analytics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"id">>, Id} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the Cross-Origin Resource Sharing (CORS) configuration information %% set for the bucket. %% %% To use this operation, you must have permission to perform the %% `s3:GetBucketCORS' action. By default, the bucket owner has this %% permission and can grant it to others. %% %% When you use this API operation with an access point, provide the alias of %% the access point in place of the bucket name. %% %% When you use this API operation with an Object Lambda access point, %% provide the alias of the Object Lambda access point in place of the bucket %% name. If the Object Lambda access point alias in a request is not valid, %% the error code `InvalidAccessPointAliasError' is returned. For more %% information about `InvalidAccessPointAliasError', see List of Error %% Codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList. %% %% For more information about CORS, see Enabling Cross-Origin Resource %% Sharing: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html. %% %% The following operations are related to `GetBucketCors': %% %% get_bucket_cors(Client, Bucket) when is_map(Client) -> get_bucket_cors(Client, Bucket, #{}, #{}). get_bucket_cors(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_cors(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_cors(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?cors"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the default encryption configuration for an Amazon S3 bucket. By %% default, all buckets have a default encryption configuration that uses %% server-side encryption with Amazon S3 managed keys (SSE-S3). For %% information about the bucket default encryption feature, see Amazon S3 %% Bucket Default Encryption: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html in %% the Amazon S3 User Guide. %% %% To use this operation, you must have permission to perform the %% `s3:GetEncryptionConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% The following operations are related to `GetBucketEncryption': %% %% get_bucket_encryption(Client, Bucket) when is_map(Client) -> get_bucket_encryption(Client, Bucket, #{}, #{}). get_bucket_encryption(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_encryption(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_encryption(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?encryption"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Gets the S3 Intelligent-Tiering configuration from the specified bucket. %% %% The S3 Intelligent-Tiering storage class is designed to optimize storage %% costs by automatically moving data to the most cost-effective storage %% access tier, without performance impact or operational overhead. S3 %% Intelligent-Tiering delivers automatic cost savings in three low latency %% and high throughput access tiers. To get the lowest storage cost on data %% that can be accessed in minutes to hours, you can choose to activate %% additional archiving capabilities. %% %% The S3 Intelligent-Tiering storage class is the ideal storage class for %% data with unknown, changing, or unpredictable access patterns, independent %% of object size or retention period. If the size of an object is less than %% 128 KB, it is not monitored and not eligible for auto-tiering. Smaller %% objects can be stored, but they are always charged at the Frequent Access %% tier rates in the S3 Intelligent-Tiering storage class. %% %% For more information, see Storage class for automatically optimizing %% frequently and infrequently accessed objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access. %% %% Operations related to `GetBucketIntelligentTieringConfiguration' %% include: %% %% get_bucket_intelligent_tiering_configuration(Client, Bucket, Id) when is_map(Client) -> get_bucket_intelligent_tiering_configuration(Client, Bucket, Id, #{}, #{}). get_bucket_intelligent_tiering_configuration(Client, Bucket, Id, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_intelligent_tiering_configuration(Client, Bucket, Id, QueryMap, HeadersMap, []). get_bucket_intelligent_tiering_configuration(Client, Bucket, Id, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?intelligent-tiering"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers = [], Query0_ = [ {<<"id">>, Id} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns an inventory configuration (identified by the inventory %% configuration ID) from the bucket. %% %% To use this operation, you must have permissions to perform the %% `s3:GetInventoryConfiguration' action. The bucket owner has this %% permission by default and can grant this permission to others. For more %% information about permissions, see Permissions Related to Bucket %% Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about the Amazon S3 inventory feature, see Amazon S3 %% Inventory: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html. %% %% The following operations are related to %% `GetBucketInventoryConfiguration': %% %% get_bucket_inventory_configuration(Client, Bucket, Id) when is_map(Client) -> get_bucket_inventory_configuration(Client, Bucket, Id, #{}, #{}). get_bucket_inventory_configuration(Client, Bucket, Id, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_inventory_configuration(Client, Bucket, Id, QueryMap, HeadersMap, []). get_bucket_inventory_configuration(Client, Bucket, Id, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?inventory"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"id">>, Id} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc For an updated version of this API, see %% GetBucketLifecycleConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html. %% %% If you configured a bucket lifecycle using the `filter' element, you %% should see the updated version of this topic. This topic is provided for %% backward compatibility. %% %% This operation is not supported by directory buckets. %% %% Returns the lifecycle configuration information set on the bucket. For %% information about lifecycle configuration, see Object Lifecycle %% Management: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html. %% %% To use this operation, you must have permission to perform the %% `s3:GetLifecycleConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% `GetBucketLifecycle' has the following special error: %% %% The following operations are related to %% `GetBucketLifecycle': %% %% get_bucket_lifecycle(Client, Bucket) when is_map(Client) -> get_bucket_lifecycle(Client, Bucket, #{}, #{}). get_bucket_lifecycle(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_lifecycle(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_lifecycle(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?lifecycle"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Bucket lifecycle configuration now supports specifying a lifecycle rule %% using an object key name prefix, one or more object tags, or a combination %% of both. Accordingly, this section describes the latest API. The response %% describes the new filter element that you can use to specify a filter to %% select a subset of objects to which the rule applies. If you are using a %% previous version of the lifecycle configuration, it still works. For the %% earlier action, see GetBucketLifecycle: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html. %% %% Returns the lifecycle configuration information set on the bucket. For %% information about lifecycle configuration, see Object Lifecycle %% Management: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html. %% %% To use this operation, you must have permission to perform the %% `s3:GetLifecycleConfiguration' action. The bucket owner has this %% permission, by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% `GetBucketLifecycleConfiguration' has the following special error: %% %% The following operations are related to %% `GetBucketLifecycleConfiguration': %% %% get_bucket_lifecycle_configuration(Client, Bucket) when is_map(Client) -> get_bucket_lifecycle_configuration(Client, Bucket, #{}, #{}). get_bucket_lifecycle_configuration(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_lifecycle_configuration(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_lifecycle_configuration(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?lifecycle"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the Region the bucket resides in. You set the bucket's Region %% using the `LocationConstraint' request parameter in a %% `CreateBucket' request. For more information, see CreateBucket: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html. %% %% When you use this API operation with an access point, provide the alias of %% the access point in place of the bucket name. %% %% When you use this API operation with an Object Lambda access point, %% provide the alias of the Object Lambda access point in place of the bucket %% name. If the Object Lambda access point alias in a request is not valid, %% the error code `InvalidAccessPointAliasError' is returned. For more %% information about `InvalidAccessPointAliasError', see List of Error %% Codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList. %% %% We recommend that you use HeadBucket: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html to %% return the Region that a bucket resides in. For backward compatibility, %% Amazon S3 continues to support GetBucketLocation. %% %% The following operations are related to `GetBucketLocation': %% %% get_bucket_location(Client, Bucket) when is_map(Client) -> get_bucket_location(Client, Bucket, #{}, #{}). get_bucket_location(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_location(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_location(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?location"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the logging status of a bucket and the permissions users have to %% view and modify that status. %% %% The following operations are related to `GetBucketLogging': %% %% get_bucket_logging(Client, Bucket) when is_map(Client) -> get_bucket_logging(Client, Bucket, #{}, #{}). get_bucket_logging(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_logging(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_logging(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?logging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Gets a metrics configuration (specified by the metrics configuration ID) %% from the bucket. Note that this doesn't include the daily storage %% metrics. %% %% To use this operation, you must have permissions to perform the %% `s3:GetMetricsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about CloudWatch request metrics for Amazon S3, see %% Monitoring Metrics with Amazon CloudWatch: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html. %% %% The following operations are related to %% `GetBucketMetricsConfiguration': %% %% get_bucket_metrics_configuration(Client, Bucket, Id) when is_map(Client) -> get_bucket_metrics_configuration(Client, Bucket, Id, #{}, #{}). get_bucket_metrics_configuration(Client, Bucket, Id, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_metrics_configuration(Client, Bucket, Id, QueryMap, HeadersMap, []). get_bucket_metrics_configuration(Client, Bucket, Id, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?metrics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"id">>, Id} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% No longer used, see GetBucketNotificationConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html. get_bucket_notification(Client, Bucket) when is_map(Client) -> get_bucket_notification(Client, Bucket, #{}, #{}). get_bucket_notification(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_notification(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_notification(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?notification"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the notification configuration of a bucket. %% %% If notifications are not enabled on the bucket, the action returns an %% empty `NotificationConfiguration' element. %% %% By default, you must be the bucket owner to read the notification %% configuration of a bucket. However, the bucket owner can use a bucket %% policy to grant permission to other users to read this configuration with %% the `s3:GetBucketNotification' permission. %% %% When you use this API operation with an access point, provide the alias of %% the access point in place of the bucket name. %% %% When you use this API operation with an Object Lambda access point, %% provide the alias of the Object Lambda access point in place of the bucket %% name. If the Object Lambda access point alias in a request is not valid, %% the error code `InvalidAccessPointAliasError' is returned. For more %% information about `InvalidAccessPointAliasError', see List of Error %% Codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList. %% %% For more information about setting and reading the notification %% configuration on a bucket, see Setting Up Notification of Bucket Events: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html. %% For more information about bucket policies, see Using Bucket Policies: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html. %% %% The following action is related to `GetBucketNotification': %% %% get_bucket_notification_configuration(Client, Bucket) when is_map(Client) -> get_bucket_notification_configuration(Client, Bucket, #{}, #{}). get_bucket_notification_configuration(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_notification_configuration(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_notification_configuration(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?notification"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Retrieves `OwnershipControls' for an Amazon S3 bucket. To use this %% operation, you must have the `s3:GetBucketOwnershipControls' %% permission. For more information about Amazon S3 permissions, see %% Specifying permissions in a policy: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html. %% %% For information about Amazon S3 Object Ownership, see Using Object %% Ownership: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html. %% %% The following operations are related to `GetBucketOwnershipControls': %% %% get_bucket_ownership_controls(Client, Bucket) when is_map(Client) -> get_bucket_ownership_controls(Client, Bucket, #{}, #{}). get_bucket_ownership_controls(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_ownership_controls(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_ownership_controls(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?ownershipControls"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc Returns the policy of a specified bucket. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
If you are using an identity other than the %% root user of the Amazon Web Services account that owns the bucket, the %% calling identity must both have the `GetBucketPolicy' permissions on %% the specified bucket and belong to the bucket owner's account in order %% to use this operation. %% %% If you don't have `GetBucketPolicy' permissions, Amazon S3 returns %% a `403 Access Denied' error. If you have the correct permissions, but %% you're not using an identity that belongs to the bucket owner's %% account, Amazon S3 returns a `405 Method Not Allowed' error. %% %% To ensure that bucket owners don't inadvertently lock themselves out %% of their own buckets, the root principal in a bucket owner's Amazon %% Web Services account can perform the `GetBucketPolicy', %% `PutBucketPolicy', and `DeleteBucketPolicy' API actions, even if %% their bucket policy explicitly denies the root principal's access. %% Bucket owner root principals can only be blocked from performing these API %% actions by VPC endpoint policies and Amazon Web Services Organizations %% policies. %% %%
Example bucket policies
General purpose %% buckets example bucket policies - See Bucket policy examples: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html %% in the Amazon S3 User Guide. %% %% Directory bucket example bucket policies - See Example bucket policies for %% S3 Express One Zone: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html %% in the Amazon S3 User Guide. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is `s3express-control.region.amazonaws.com'. %% %%
The following action is related to `GetBucketPolicy': %% %% get_bucket_policy(Client, Bucket) when is_map(Client) -> get_bucket_policy(Client, Bucket, #{}, #{}). get_bucket_policy(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_policy(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_policy(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?policy"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Retrieves the policy status for an Amazon S3 bucket, indicating whether %% the bucket is public. In order to use this operation, you must have the %% `s3:GetBucketPolicyStatus' permission. For more information about %% Amazon S3 permissions, see Specifying Permissions in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html. %% %% For more information about when Amazon S3 considers a bucket public, see %% The Meaning of "Public": %% https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status. %% %% The following operations are related to `GetBucketPolicyStatus': %% %% get_bucket_policy_status(Client, Bucket) when is_map(Client) -> get_bucket_policy_status(Client, Bucket, #{}, #{}). get_bucket_policy_status(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_policy_status(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_policy_status(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?policyStatus"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the replication configuration of a bucket. %% %% It can take a while to propagate the put or delete a replication %% configuration to all Amazon S3 systems. Therefore, a get request soon %% after put or delete can return a wrong result. %% %% For information about replication configuration, see Replication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html in the %% Amazon S3 User Guide. %% %% This action requires permissions for the %% `s3:GetReplicationConfiguration' action. For more information about %% permissions, see Using Bucket Policies and User Policies: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html. %% %% If you include the `Filter' element in a replication configuration, %% you must also include the `DeleteMarkerReplication' and `Priority' %% elements. The response also returns those elements. %% %% For information about `GetBucketReplication' errors, see List of %% replication-related error codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList %% %% The following operations are related to `GetBucketReplication': %% %% get_bucket_replication(Client, Bucket) when is_map(Client) -> get_bucket_replication(Client, Bucket, #{}, #{}). get_bucket_replication(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_replication(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_replication(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?replication"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the request payment configuration of a bucket. To use this version %% of the operation, you must be the bucket owner. For more information, see %% Requester Pays Buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html. %% %% The following operations are related to `GetBucketRequestPayment': %% %% get_bucket_request_payment(Client, Bucket) when is_map(Client) -> get_bucket_request_payment(Client, Bucket, #{}, #{}). get_bucket_request_payment(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_request_payment(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_request_payment(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?requestPayment"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the tag set associated with the bucket. %% %% To use this operation, you must have permission to perform the %% `s3:GetBucketTagging' action. By default, the bucket owner has this %% permission and can grant this permission to others. %% %% `GetBucketTagging' has the following special error: %% %% The following operations are related to %% `GetBucketTagging': %% %% get_bucket_tagging(Client, Bucket) when is_map(Client) -> get_bucket_tagging(Client, Bucket, #{}, #{}). get_bucket_tagging(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_tagging(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_tagging(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?tagging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the versioning state of a bucket. %% %% To retrieve the versioning state of a bucket, you must be the bucket %% owner. %% %% This implementation also returns the MFA Delete status of the versioning %% state. If the MFA Delete status is `enabled', the bucket owner must %% use an authentication device to change the versioning state of the bucket. %% %% The following operations are related to `GetBucketVersioning': %% %% get_bucket_versioning(Client, Bucket) when is_map(Client) -> get_bucket_versioning(Client, Bucket, #{}, #{}). get_bucket_versioning(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_versioning(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_versioning(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?versioning"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the website configuration for a bucket. To host website on Amazon %% S3, you can configure a bucket as website by adding a website %% configuration. For more information about hosting websites, see Hosting %% Websites on Amazon S3: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html. %% %% This GET action requires the `S3:GetBucketWebsite' permission. By %% default, only the bucket owner can read the bucket website configuration. %% However, bucket owners can allow other users to read the website %% configuration by writing a bucket policy granting them the %% `S3:GetBucketWebsite' permission. %% %% The following operations are related to `GetBucketWebsite': %% %% get_bucket_website(Client, Bucket) when is_map(Client) -> get_bucket_website(Client, Bucket, #{}, #{}). get_bucket_website(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_bucket_website(Client, Bucket, QueryMap, HeadersMap, []). get_bucket_website(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?website"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc Retrieves an object from Amazon S3. %% %% In the `GetObject' request, specify the full key name for the object. %% %% General purpose buckets - Both the virtual-hosted-style requests and the %% path-style requests are supported. For a virtual hosted-style request %% example, if you have the object `photos/2006/February/sample.jpg', %% specify the object key name as `/photos/2006/February/sample.jpg'. For %% a path-style request example, if you have the object %% `photos/2006/February/sample.jpg' in the bucket named %% `examplebucket', specify the object key name as %% `/examplebucket/photos/2006/February/sample.jpg'. For more information %% about request types, see HTTP Host Header Bucket Specification: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket %% in the Amazon S3 User Guide. %% %% Directory buckets - Only virtual-hosted-style requests are supported. For %% a virtual hosted-style request example, if you have the object %% `photos/2006/February/sample.jpg' in the bucket named %% `examplebucket--use1-az5--x-s3', specify the object key name as %% `/photos/2006/February/sample.jpg'. Also, when you make requests to %% this API operation, your requests are sent to the Zonal endpoint. These %% endpoints support virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Storage classes
If the object you are %% retrieving is stored in the S3 Glacier Flexible Retrieval storage class, %% the S3 Glacier Deep Archive storage class, the S3 Intelligent-Tiering %% Archive Access tier, or the S3 Intelligent-Tiering Deep Archive Access %% tier, before you can retrieve the object you must first restore a copy %% using RestoreObject: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html. %% Otherwise, this operation returns an `InvalidObjectState' error. For %% information about restoring archived objects, see Restoring Archived %% Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html in %% the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, only the S3 Express One Zone %% storage class is supported to store newly created objects. Unsupported %% storage class values won't write a destination object and will respond %% with the HTTP status code `400 Bad Request'. %% %%
Encryption
Encryption request headers, like %% `x-amz-server-side-encryption', should not be sent for the %% `GetObject' requests, if your object uses server-side encryption with %% Amazon S3 managed encryption keys (SSE-S3), server-side encryption with %% Key Management Service (KMS) keys (SSE-KMS), or dual-layer server-side %% encryption with Amazon Web Services KMS keys (DSSE-KMS). If you include %% the header in your `GetObject' requests for the object that uses these %% types of keys, you’ll get an HTTP `400 Bad Request' error. %% %%
Overriding response header values through the request
%% There are times when you want to override certain response header values %% of a `GetObject' response. For example, you might override the %% `Content-Disposition' response header value through your %% `GetObject' request. %% %% You can override values for a set of response headers. These modified %% response header values are included only in a successful response, that %% is, when the HTTP status code `200 OK' is returned. The headers you %% can override using the following query parameters in the request are a %% subset of the headers that Amazon S3 accepts when you create an object. %% %% The response headers that you can override for the `GetObject' %% response are `Cache-Control', `Content-Disposition', %% `Content-Encoding', `Content-Language', `Content-Type', and %% `Expires'. %% %% To override values for a set of response headers in the `GetObject' %% response, you can use the following query parameters in the request. %% %% When you use these parameters, you must sign the request by %% using either an Authorization header or a presigned URL. These parameters %% cannot be used with an unsigned (anonymous) request. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `GetObject': %% %% get_object(Client, Bucket, Key) when is_map(Client) -> get_object(Client, Bucket, Key, #{}, #{}). get_object(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, true} | Options0], Headers0 = [ {<<"x-amz-checksum-mode">>, maps:get(<<"x-amz-checksum-mode">>, HeadersMap, undefined)}, {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"If-Match">>, maps:get(<<"If-Match">>, HeadersMap, undefined)}, {<<"If-Modified-Since">>, maps:get(<<"If-Modified-Since">>, HeadersMap, undefined)}, {<<"If-None-Match">>, maps:get(<<"If-None-Match">>, HeadersMap, undefined)}, {<<"If-Unmodified-Since">>, maps:get(<<"If-Unmodified-Since">>, HeadersMap, undefined)}, {<<"Range">>, maps:get(<<"Range">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-algorithm">>, maps:get(<<"x-amz-server-side-encryption-customer-algorithm">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key">>, maps:get(<<"x-amz-server-side-encryption-customer-key">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, maps:get(<<"x-amz-server-side-encryption-customer-key-MD5">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"partNumber">>, maps:get(<<"partNumber">>, QueryMap, undefined)}, {<<"response-cache-control">>, maps:get(<<"response-cache-control">>, QueryMap, undefined)}, {<<"response-content-disposition">>, maps:get(<<"response-content-disposition">>, QueryMap, undefined)}, {<<"response-content-encoding">>, maps:get(<<"response-content-encoding">>, QueryMap, undefined)}, {<<"response-content-language">>, maps:get(<<"response-content-language">>, QueryMap, undefined)}, {<<"response-content-type">>, maps:get(<<"response-content-type">>, QueryMap, undefined)}, {<<"response-expires">>, maps:get(<<"response-expires">>, QueryMap, undefined)}, {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-delete-marker">>, <<"DeleteMarker">>}, {<<"x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-restore">>, <<"Restore">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"Content-Type">>, <<"ContentType">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-version-id">>, <<"VersionId">>}, {<<"accept-ranges">>, <<"AcceptRanges">>}, {<<"x-amz-website-redirect-location">>, <<"WebsiteRedirectLocation">>}, {<<"Content-Language">>, <<"ContentLanguage">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"Content-Encoding">>, <<"ContentEncoding">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"ETag">>, <<"ETag">>}, {<<"Last-Modified">>, <<"LastModified">>}, {<<"Content-Range">>, <<"ContentRange">>}, {<<"Expires">>, <<"Expires">>}, {<<"x-amz-tagging-count">>, <<"TagCount">>}, {<<"x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-replication-status">>, <<"ReplicationStatus">>}, {<<"Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-missing-meta">>, <<"MissingMeta">>}, {<<"Content-Length">>, <<"ContentLength">>}, {<<"x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"Content-Disposition">>, <<"ContentDisposition">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-mp-parts-count">>, <<"PartsCount">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Returns the access control list (ACL) of an object. To use this operation, %% you must have `s3:GetObjectAcl' permissions or `READ_ACP' access %% to the object. For more information, see Mapping of ACL permissions and %% access policy permissions: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#acl-access-policy-permission-mapping %% in the Amazon S3 User Guide %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% By default, GET returns ACL information about the current version of an %% object. To return ACL information about a different version, use the %% versionId subresource. %% %% If your bucket uses the bucket owner enforced setting for S3 Object %% Ownership, requests to read ACLs are still supported and return the %% `bucket-owner-full-control' ACL with the owner being the account that %% created the bucket. For more information, see Controlling object ownership %% and disabling ACLs: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html %% in the Amazon S3 User Guide. %% %% The following operations are related to `GetObjectAcl': %% %% get_object_acl(Client, Bucket, Key) when is_map(Client) -> get_object_acl(Client, Bucket, Key, #{}, #{}). get_object_acl(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_acl(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object_acl(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?acl"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Retrieves all the metadata from an object without returning the %% object itself. %% %% This operation is useful if you're interested only in an object's %% metadata. %% %% `GetObjectAttributes' combines the functionality of `HeadObject' %% and `ListParts'. All of the data returned with each of those %% individual calls can be returned with a single call to %% `GetObjectAttributes'. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Encryption
Encryption request headers, %% like `x-amz-server-side-encryption', should not be sent for `HEAD' %% requests if your object uses server-side encryption with Key Management %% Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with %% Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with %% Amazon S3 managed encryption keys (SSE-S3). The %% `x-amz-server-side-encryption' header is used when you `PUT' an %% object to S3 and want to specify the encryption method. If you include %% this header in a `GET' request for an object that uses these types of %% keys, you’ll get an HTTP `400 Bad Request' error. It's because the %% encryption method can't be changed when you retrieve the object. %% %% If you encrypt an object by using server-side encryption with %% customer-provided encryption keys (SSE-C) when you store the object in %% Amazon S3, then when you retrieve the metadata from the object, you must %% use the following headers to provide the encryption key for the server to %% be able to retrieve the object's metadata. The headers are: %% %% For more information about SSE-C, see Server-Side Encryption %% (Using Customer-Provided Encryption Keys): %% https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html %% in the Amazon S3 User Guide. %% %% Directory bucket permissions - For directory buckets, only server-side %% encryption with Amazon S3 managed keys (SSE-S3) (`AES256') is %% supported. %% %%
Versioning
Directory buckets - S3 Versioning isn't %% enabled and supported for directory buckets. For this API operation, only %% the `null' value of the version ID is supported by directory buckets. %% You can only specify `null' to the `versionId' query parameter in %% the request. %% %%
Conditional request headers
Consider the following %% when using request headers: %% %%
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following actions are related to %% `GetObjectAttributes': %% %% get_object_attributes(Client, Bucket, Key, ObjectAttributes) when is_map(Client) -> get_object_attributes(Client, Bucket, Key, ObjectAttributes, #{}, #{}). get_object_attributes(Client, Bucket, Key, ObjectAttributes, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_attributes(Client, Bucket, Key, ObjectAttributes, QueryMap, HeadersMap, []). get_object_attributes(Client, Bucket, Key, ObjectAttributes, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?attributes"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-max-parts">>, maps:get(<<"x-amz-max-parts">>, HeadersMap, undefined)}, {<<"x-amz-object-attributes">>, ObjectAttributes}, {<<"x-amz-part-number-marker">>, maps:get(<<"x-amz-part-number-marker">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-algorithm">>, maps:get(<<"x-amz-server-side-encryption-customer-algorithm">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key">>, maps:get(<<"x-amz-server-side-encryption-customer-key">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, maps:get(<<"x-amz-server-side-encryption-customer-key-MD5">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-delete-marker">>, <<"DeleteMarker">>}, {<<"Last-Modified">>, <<"LastModified">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Gets an object's current legal hold status. For more information, see %% Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% The following action is related to `GetObjectLegalHold': %% %% get_object_legal_hold(Client, Bucket, Key) when is_map(Client) -> get_object_legal_hold(Client, Bucket, Key, #{}, #{}). get_object_legal_hold(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_legal_hold(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object_legal_hold(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?legal-hold"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Gets the Object Lock configuration for a bucket. The rule specified in the %% Object Lock configuration will be applied by default to every new object %% placed in the specified bucket. For more information, see Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. %% %% The following action is related to `GetObjectLockConfiguration': %% %% get_object_lock_configuration(Client, Bucket) when is_map(Client) -> get_object_lock_configuration(Client, Bucket, #{}, #{}). get_object_lock_configuration(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_lock_configuration(Client, Bucket, QueryMap, HeadersMap, []). get_object_lock_configuration(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?object-lock"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Retrieves an object's retention settings. For more information, see %% Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% The following action is related to `GetObjectRetention': %% %% get_object_retention(Client, Bucket, Key) when is_map(Client) -> get_object_retention(Client, Bucket, Key, #{}, #{}). get_object_retention(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_retention(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object_retention(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?retention"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns the tag-set of an object. You send the GET request against the %% tagging subresource associated with the object. %% %% To use this operation, you must have permission to perform the %% `s3:GetObjectTagging' action. By default, the GET action returns %% information about current version of an object. For a versioned bucket, %% you can have multiple versions of an object in your bucket. To retrieve %% tags of any other version, use the versionId query parameter. You also %% need permission for the `s3:GetObjectVersionTagging' action. %% %% By default, the bucket owner has this permission and can grant this %% permission to others. %% %% For information about the Amazon S3 object tagging feature, see Object %% Tagging: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html. %% %% The following actions are related to `GetObjectTagging': %% %% get_object_tagging(Client, Bucket, Key) when is_map(Client) -> get_object_tagging(Client, Bucket, Key, #{}, #{}). get_object_tagging(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_tagging(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object_tagging(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?tagging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"versionId">>, maps:get(<<"versionId">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Returns torrent files from a bucket. BitTorrent can save you bandwidth %% when you're distributing large files. %% %% You can get torrent only for objects that are less than 5 GB in size, and %% that are not encrypted using server-side encryption with a %% customer-provided encryption key. %% %% To use GET, you must have READ access to the object. %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% The following action is related to `GetObjectTorrent': %% %% get_object_torrent(Client, Bucket, Key) when is_map(Client) -> get_object_torrent(Client, Bucket, Key, #{}, #{}). get_object_torrent(Client, Bucket, Key, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_object_torrent(Client, Bucket, Key, QueryMap, HeadersMap, []). get_object_torrent(Client, Bucket, Key, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?torrent"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, true} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Retrieves the `PublicAccessBlock' configuration for an Amazon S3 %% bucket. To use this operation, you must have the %% `s3:GetBucketPublicAccessBlock' permission. For more information about %% Amazon S3 permissions, see Specifying Permissions in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html. %% %% When Amazon S3 evaluates the `PublicAccessBlock' configuration for a %% bucket or an object, it checks the `PublicAccessBlock' configuration %% for both the bucket (or the bucket that contains the object) and the %% bucket owner's account. If the `PublicAccessBlock' settings are %% different between the bucket and the account, Amazon S3 uses the most %% restrictive combination of the bucket-level and account-level settings. %% %% For more information about when Amazon S3 considers a bucket or an object %% public, see The Meaning of "Public": %% https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status. %% %% The following operations are related to `GetPublicAccessBlock': %% %% get_public_access_block(Client, Bucket) when is_map(Client) -> get_public_access_block(Client, Bucket, #{}, #{}). get_public_access_block(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> get_public_access_block(Client, Bucket, QueryMap, HeadersMap, []). get_public_access_block(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?publicAccessBlock"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc You can use this operation to determine if a bucket exists and if you %% have permission to access it. %% %% The action returns a `200 OK' if the bucket exists and you have %% permission to access it. %% %% If the bucket does not exist or you do not have permission to access it, %% the `HEAD' request returns a generic `400 Bad Request', `403 %% Forbidden' or `404 Not Found' code. A message body is not %% included, so you cannot determine the exception beyond these error codes. %% %% Directory buckets - You must make requests for this API operation to the %% Zonal endpoint. These endpoints support virtual-hosted-style requests in %% the format `https://bucket_name.s3express-az_id.region.amazonaws.com'. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Authentication and authorization
All `HeadBucket' %% requests must be authenticated and signed by using IAM credentials (access %% key ID and secret access key for the IAM identities). All headers with the %% `x-amz-' prefix, including `x-amz-copy-source', must be signed. %% For more information, see REST Authentication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html. %% %% Directory bucket - You must use IAM credentials to authenticate and %% authorize your access to the `HeadBucket' API operation, instead of %% using the temporary security credentials through the `CreateSession' %% API operation. %% %% Amazon Web Services CLI or SDKs handles authentication and authorization %% on your behalf. %% %%
Permissions
%% %%
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
head_bucket(Client, Bucket, Input) -> head_bucket(Client, Bucket, Input, []). head_bucket(Client, Bucket, Input0, Options0) -> Method = head, Path = ["/", aws_util:encode_uri(Bucket), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, {_, ResponseHeaders} = Response} -> Body0 = #{}, ResponseHeadersParams = [ {<<"x-amz-access-point-alias">>, <<"AccessPointAlias">>}, {<<"x-amz-bucket-location-name">>, <<"BucketLocationName">>}, {<<"x-amz-bucket-location-type">>, <<"BucketLocationType">>}, {<<"x-amz-bucket-region">>, <<"BucketRegion">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc The `HEAD' operation retrieves metadata from an object without %% returning the object itself. %% %% This operation is useful if you're interested only in an object's %% metadata. %% %% A `HEAD' request has the same options as a `GET' operation on an %% object. The response is identical to the `GET' response except that %% there is no response body. Because of this, if the `HEAD' request %% generates an error, it returns a generic code, such as `400 Bad %% Request', `403 Forbidden', `404 Not Found', `405 Method Not %% Allowed', `412 Precondition Failed', or `304 Not Modified'. %% It's not possible to retrieve the exact exception of these error %% codes. %% %% Request headers are limited to 8 KB in size. For more information, see %% Common Request Headers: %% https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
%% %%
Encryption
Encryption request headers, %% like `x-amz-server-side-encryption', should not be sent for `HEAD' %% requests if your object uses server-side encryption with Key Management %% Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with %% Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with %% Amazon S3 managed encryption keys (SSE-S3). The %% `x-amz-server-side-encryption' header is used when you `PUT' an %% object to S3 and want to specify the encryption method. If you include %% this header in a `HEAD' request for an object that uses these types of %% keys, you’ll get an HTTP `400 Bad Request' error. It's because the %% encryption method can't be changed when you retrieve the object. %% %% If you encrypt an object by using server-side encryption with %% customer-provided encryption keys (SSE-C) when you store the object in %% Amazon S3, then when you retrieve the metadata from the object, you must %% use the following headers to provide the encryption key for the server to %% be able to retrieve the object's metadata. The headers are: %% %% For more information about SSE-C, see Server-Side Encryption %% (Using Customer-Provided Encryption Keys): %% https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html %% in the Amazon S3 User Guide. %% %% Directory bucket permissions - For directory buckets, only server-side %% encryption with Amazon S3 managed keys (SSE-S3) (`AES256') is %% supported. %% %%
Versioning
Directory buckets - Delete marker is not supported by %% directory buckets. %% %% Directory buckets - S3 Versioning isn't enabled and supported for %% directory buckets. For this API operation, only the `null' value of %% the version ID is supported by directory buckets. You can only specify %% `null' to the `versionId' query parameter in the request. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following actions are related to `HeadObject': %% %% head_object(Client, Bucket, Key, Input) -> head_object(Client, Bucket, Key, Input, []). head_object(Client, Bucket, Key, Input0, Options0) -> Method = head, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-checksum-mode">>, <<"ChecksumMode">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"If-Match">>, <<"IfMatch">>}, {<<"If-Modified-Since">>, <<"IfModifiedSince">>}, {<<"If-None-Match">>, <<"IfNoneMatch">>}, {<<"If-Unmodified-Since">>, <<"IfUnmodifiedSince">>}, {<<"Range">>, <<"Range">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"partNumber">>, <<"PartNumber">>}, {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, {_, ResponseHeaders} = Response} -> Body0 = #{}, ResponseHeadersParams = [ {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-delete-marker">>, <<"DeleteMarker">>}, {<<"x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-restore">>, <<"Restore">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"Content-Type">>, <<"ContentType">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-version-id">>, <<"VersionId">>}, {<<"accept-ranges">>, <<"AcceptRanges">>}, {<<"x-amz-website-redirect-location">>, <<"WebsiteRedirectLocation">>}, {<<"Content-Language">>, <<"ContentLanguage">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"Content-Encoding">>, <<"ContentEncoding">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"ETag">>, <<"ETag">>}, {<<"x-amz-archive-status">>, <<"ArchiveStatus">>}, {<<"Last-Modified">>, <<"LastModified">>}, {<<"Expires">>, <<"Expires">>}, {<<"x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-replication-status">>, <<"ReplicationStatus">>}, {<<"Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-missing-meta">>, <<"MissingMeta">>}, {<<"Content-Length">>, <<"ContentLength">>}, {<<"x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"Content-Disposition">>, <<"ContentDisposition">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-mp-parts-count">>, <<"PartsCount">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Lists the analytics configurations for the bucket. You can have up to %% 1,000 analytics configurations per bucket. %% %% This action supports list pagination and does not return more than 100 %% configurations at a time. You should always check the `IsTruncated' %% element in the response. If there are no more configurations to list, %% `IsTruncated' is set to false. If there are more configurations to %% list, `IsTruncated' is set to true, and there will be a value in %% `NextContinuationToken'. You use the `NextContinuationToken' value %% to continue the pagination of the list by passing the value in %% continuation-token in the request to `GET' the next page. %% %% To use this operation, you must have permissions to perform the %% `s3:GetAnalyticsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about Amazon S3 analytics feature, see Amazon S3 Analytics %% – Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html. %% %% The following operations are related to %% `ListBucketAnalyticsConfigurations': %% %% list_bucket_analytics_configurations(Client, Bucket) when is_map(Client) -> list_bucket_analytics_configurations(Client, Bucket, #{}, #{}). list_bucket_analytics_configurations(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_bucket_analytics_configurations(Client, Bucket, QueryMap, HeadersMap, []). list_bucket_analytics_configurations(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?analytics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Lists the S3 Intelligent-Tiering configuration from the specified bucket. %% %% The S3 Intelligent-Tiering storage class is designed to optimize storage %% costs by automatically moving data to the most cost-effective storage %% access tier, without performance impact or operational overhead. S3 %% Intelligent-Tiering delivers automatic cost savings in three low latency %% and high throughput access tiers. To get the lowest storage cost on data %% that can be accessed in minutes to hours, you can choose to activate %% additional archiving capabilities. %% %% The S3 Intelligent-Tiering storage class is the ideal storage class for %% data with unknown, changing, or unpredictable access patterns, independent %% of object size or retention period. If the size of an object is less than %% 128 KB, it is not monitored and not eligible for auto-tiering. Smaller %% objects can be stored, but they are always charged at the Frequent Access %% tier rates in the S3 Intelligent-Tiering storage class. %% %% For more information, see Storage class for automatically optimizing %% frequently and infrequently accessed objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access. %% %% Operations related to `ListBucketIntelligentTieringConfigurations' %% include: %% %% list_bucket_intelligent_tiering_configurations(Client, Bucket) when is_map(Client) -> list_bucket_intelligent_tiering_configurations(Client, Bucket, #{}, #{}). list_bucket_intelligent_tiering_configurations(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_bucket_intelligent_tiering_configurations(Client, Bucket, QueryMap, HeadersMap, []). list_bucket_intelligent_tiering_configurations(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?intelligent-tiering"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers = [], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns a list of inventory configurations for the bucket. You can have up %% to 1,000 analytics configurations per bucket. %% %% This action supports list pagination and does not return more than 100 %% configurations at a time. Always check the `IsTruncated' element in %% the response. If there are no more configurations to list, %% `IsTruncated' is set to false. If there are more configurations to %% list, `IsTruncated' is set to true, and there is a value in %% `NextContinuationToken'. You use the `NextContinuationToken' value %% to continue the pagination of the list by passing the value in %% continuation-token in the request to `GET' the next page. %% %% To use this operation, you must have permissions to perform the %% `s3:GetInventoryConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about the Amazon S3 inventory feature, see Amazon S3 %% Inventory: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html %% %% The following operations are related to %% `ListBucketInventoryConfigurations': %% %% list_bucket_inventory_configurations(Client, Bucket) when is_map(Client) -> list_bucket_inventory_configurations(Client, Bucket, #{}, #{}). list_bucket_inventory_configurations(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_bucket_inventory_configurations(Client, Bucket, QueryMap, HeadersMap, []). list_bucket_inventory_configurations(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?inventory"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Lists the metrics configurations for the bucket. The metrics %% configurations are only for the request metrics of the bucket and do not %% provide information on daily storage metrics. You can have up to 1,000 %% configurations per bucket. %% %% This action supports list pagination and does not return more than 100 %% configurations at a time. Always check the `IsTruncated' element in %% the response. If there are no more configurations to list, %% `IsTruncated' is set to false. If there are more configurations to %% list, `IsTruncated' is set to true, and there is a value in %% `NextContinuationToken'. You use the `NextContinuationToken' value %% to continue the pagination of the list by passing the value in %% `continuation-token' in the request to `GET' the next page. %% %% To use this operation, you must have permissions to perform the %% `s3:GetMetricsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For more information about metrics configurations and CloudWatch request %% metrics, see Monitoring Metrics with Amazon CloudWatch: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html. %% %% The following operations are related to %% `ListBucketMetricsConfigurations': %% %% list_bucket_metrics_configurations(Client, Bucket) when is_map(Client) -> list_bucket_metrics_configurations(Client, Bucket, #{}, #{}). list_bucket_metrics_configurations(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_bucket_metrics_configurations(Client, Bucket, QueryMap, HeadersMap, []). list_bucket_metrics_configurations(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?metrics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Returns a list of all buckets owned by the authenticated sender of the %% request. To use this operation, you must have the %% `s3:ListAllMyBuckets' permission. %% %% For information about Amazon S3 buckets, see Creating, configuring, and %% working with Amazon S3 buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html. list_buckets(Client) when is_map(Client) -> list_buckets(Client, #{}, #{}). list_buckets(Client, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_buckets(Client, QueryMap, HeadersMap, []). list_buckets(Client, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/"], Bucket = undefined, SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers = [], Query_ = [], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc Returns a list of all Amazon S3 directory buckets owned by the %% authenticated sender of the request. %% %% For more information about directory buckets, see Directory buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html %% in the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
You must have the %% `s3express:ListAllMyDirectoryBuckets' permission in an IAM %% identity-based policy instead of a bucket policy. Cross-account access to %% this API operation isn't supported. This operation can only be %% performed by the Amazon Web Services account that owns the resource. For %% more information about directory bucket policies and permissions, see %% Amazon Web Services Identity and Access Management (IAM) for S3 Express %% One Zone: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html %% in the Amazon S3 User Guide. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is `s3express-control.region.amazonaws.com'. %% %%
list_directory_buckets(Client) when is_map(Client) -> list_directory_buckets(Client, #{}, #{}). list_directory_buckets(Client, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_directory_buckets(Client, QueryMap, HeadersMap, []). list_directory_buckets(Client, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/"], Bucket = undefined, SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers = [], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)}, {<<"max-directory-buckets">>, maps:get(<<"max-directory-buckets">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket). %% @doc This operation lists in-progress multipart uploads in a bucket. %% %% An in-progress multipart upload is a multipart upload that has been %% initiated by the `CreateMultipartUpload' request, but has not yet been %% completed or aborted. %% %% Directory buckets - If multipart uploads in a directory bucket are in %% progress, you can't delete the bucket until all the in-progress %% multipart uploads are aborted or completed. %% %% The `ListMultipartUploads' operation returns a maximum of 1,000 %% multipart uploads in the response. The limit of 1,000 multipart uploads is %% also the default value. You can further limit the number of uploads in a %% response by specifying the `max-uploads' request parameter. If there %% are more than 1,000 multipart uploads that satisfy your %% `ListMultipartUploads' request, the response returns an %% `IsTruncated' element with the value of `true', a %% `NextKeyMarker' element, and a `NextUploadIdMarker' element. To %% list the remaining multipart uploads, you need to make subsequent %% `ListMultipartUploads' requests. In these requests, include two query %% parameters: `key-marker' and `upload-id-marker'. Set the value of %% `key-marker' to the `NextKeyMarker' value from the previous %% response. Similarly, set the value of `upload-id-marker' to the %% `NextUploadIdMarker' value from the previous response. %% %% Directory buckets - The `upload-id-marker' element and the %% `NextUploadIdMarker' element aren'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. %% %% For more information about multipart uploads, see Uploading Objects Using %% Multipart Upload: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html in %% the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Sorting of multipart uploads in response
%%
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to %% `ListMultipartUploads': %% %% list_multipart_uploads(Client, Bucket) when is_map(Client) -> list_multipart_uploads(Client, Bucket, #{}, #{}). list_multipart_uploads(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_multipart_uploads(Client, Bucket, QueryMap, HeadersMap, []). list_multipart_uploads(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?uploads"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"delimiter">>, maps:get(<<"delimiter">>, QueryMap, undefined)}, {<<"encoding-type">>, maps:get(<<"encoding-type">>, QueryMap, undefined)}, {<<"key-marker">>, maps:get(<<"key-marker">>, QueryMap, undefined)}, {<<"max-uploads">>, maps:get(<<"max-uploads">>, QueryMap, undefined)}, {<<"prefix">>, maps:get(<<"prefix">>, QueryMap, undefined)}, {<<"upload-id-marker">>, maps:get(<<"upload-id-marker">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Returns metadata about all versions of the objects in a bucket. You can %% also use request parameters as selection criteria to return metadata about %% a subset of all the object versions. %% %% To use this operation, you must have permission to perform the %% `s3:ListBucketVersions' action. Be aware of the name difference. %% %% A `200 OK' response can contain valid or invalid XML. Make sure to %% design your application to parse the contents of the response and handle %% it appropriately. %% %% To use this operation, you must have READ access to the bucket. %% %% The following operations are related to `ListObjectVersions': %% %% list_object_versions(Client, Bucket) when is_map(Client) -> list_object_versions(Client, Bucket, #{}, #{}). list_object_versions(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_object_versions(Client, Bucket, QueryMap, HeadersMap, []). list_object_versions(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?versions"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-optional-object-attributes">>, maps:get(<<"x-amz-optional-object-attributes">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"delimiter">>, maps:get(<<"delimiter">>, QueryMap, undefined)}, {<<"encoding-type">>, maps:get(<<"encoding-type">>, QueryMap, undefined)}, {<<"key-marker">>, maps:get(<<"key-marker">>, QueryMap, undefined)}, {<<"max-keys">>, maps:get(<<"max-keys">>, QueryMap, undefined)}, {<<"prefix">>, maps:get(<<"prefix">>, QueryMap, undefined)}, {<<"version-id-marker">>, maps:get(<<"version-id-marker">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Returns some or all (up to 1,000) of the objects in a bucket. You can use %% the request parameters as selection criteria to return a subset of the %% objects in a bucket. A 200 OK response can contain valid or invalid XML. %% Be sure to design your application to parse the contents of the response %% and handle it appropriately. %% %% This action has been revised. We recommend that you use the newer version, %% ListObjectsV2: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html, %% when developing applications. For backward compatibility, Amazon S3 %% continues to support `ListObjects'. %% %% The following operations are related to `ListObjects': %% %% list_objects(Client, Bucket) when is_map(Client) -> list_objects(Client, Bucket, #{}, #{}). list_objects(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_objects(Client, Bucket, QueryMap, HeadersMap, []). list_objects(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-optional-object-attributes">>, maps:get(<<"x-amz-optional-object-attributes">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"delimiter">>, maps:get(<<"delimiter">>, QueryMap, undefined)}, {<<"encoding-type">>, maps:get(<<"encoding-type">>, QueryMap, undefined)}, {<<"marker">>, maps:get(<<"marker">>, QueryMap, undefined)}, {<<"max-keys">>, maps:get(<<"max-keys">>, QueryMap, undefined)}, {<<"prefix">>, maps:get(<<"prefix">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Returns some or all (up to 1,000) of the objects in a bucket with %% each request. %% %% You can use the request parameters as selection criteria to return a %% subset of the objects in a bucket. A `200 OK' response can contain %% valid or invalid XML. Make sure to design your application to parse the %% contents of the response and handle it appropriately. For more information %% about listing objects, see Listing object keys programmatically: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html %% in the Amazon S3 User Guide. To get a list of your buckets, see %% ListBuckets: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Sorting order of returned objects
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
This section describes the latest revision of this action. We %% recommend that you use this revised API operation for application %% development. For backward compatibility, Amazon S3 continues to support %% the prior version of this API operation, ListObjects: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html. %% %% The following operations are related to `ListObjectsV2': %% %% list_objects_v2(Client, Bucket) when is_map(Client) -> list_objects_v2(Client, Bucket, #{}, #{}). list_objects_v2(Client, Bucket, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_objects_v2(Client, Bucket, QueryMap, HeadersMap, []). list_objects_v2(Client, Bucket, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "?list-type=2"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-optional-object-attributes">>, maps:get(<<"x-amz-optional-object-attributes">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"continuation-token">>, maps:get(<<"continuation-token">>, QueryMap, undefined)}, {<<"delimiter">>, maps:get(<<"delimiter">>, QueryMap, undefined)}, {<<"encoding-type">>, maps:get(<<"encoding-type">>, QueryMap, undefined)}, {<<"fetch-owner">>, maps:get(<<"fetch-owner">>, QueryMap, undefined)}, {<<"max-keys">>, maps:get(<<"max-keys">>, QueryMap, undefined)}, {<<"prefix">>, maps:get(<<"prefix">>, QueryMap, undefined)}, {<<"start-after">>, maps:get(<<"start-after">>, QueryMap, undefined)} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Lists the parts that have been uploaded for a specific multipart %% upload. %% %% To use this operation, you must provide the `upload ID' in the %% request. You obtain this uploadID by sending the initiate multipart upload %% request through CreateMultipartUpload: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html. %% %% The `ListParts' request returns a maximum of 1,000 uploaded parts. The %% limit of 1,000 parts is also the default value. You can restrict the %% number of parts in a response by specifying the `max-parts' request %% parameter. If your multipart upload consists of more than 1,000 parts, the %% response returns an `IsTruncated' field with the value of `true', %% and a `NextPartNumberMarker' element. To list remaining uploaded %% parts, in subsequent `ListParts' requests, include the %% `part-number-marker' query string parameter and set its value to the %% `NextPartNumberMarker' field value from the previous response. %% %% For more information on multipart uploads, see Uploading Objects Using %% Multipart Upload: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html in %% the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `ListParts': %% %% list_parts(Client, Bucket, Key, UploadId) when is_map(Client) -> list_parts(Client, Bucket, Key, UploadId, #{}, #{}). list_parts(Client, Bucket, Key, UploadId, QueryMap, HeadersMap) when is_map(Client), is_map(QueryMap), is_map(HeadersMap) -> list_parts(Client, Bucket, Key, UploadId, QueryMap, HeadersMap, []). list_parts(Client, Bucket, Key, UploadId, QueryMap, HeadersMap, Options0) when is_map(Client), is_map(QueryMap), is_map(HeadersMap), is_list(Options0) -> Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false} | Options0], Headers0 = [ {<<"x-amz-expected-bucket-owner">>, maps:get(<<"x-amz-expected-bucket-owner">>, HeadersMap, undefined)}, {<<"x-amz-request-payer">>, maps:get(<<"x-amz-request-payer">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-algorithm">>, maps:get(<<"x-amz-server-side-encryption-customer-algorithm">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key">>, maps:get(<<"x-amz-server-side-encryption-customer-key">>, HeadersMap, undefined)}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, maps:get(<<"x-amz-server-side-encryption-customer-key-MD5">>, HeadersMap, undefined)} ], Headers = [H || {_, V} = H <- Headers0, V =/= undefined], Query0_ = [ {<<"max-parts">>, maps:get(<<"max-parts">>, QueryMap, undefined)}, {<<"part-number-marker">>, maps:get(<<"part-number-marker">>, QueryMap, undefined)}, {<<"uploadId">>, UploadId} ], Query_ = [H || {_, V} = H <- Query0_, V =/= undefined], case request(Client, get, Path, Query_, Headers, undefined, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-abort-date">>, <<"AbortDate">>}, {<<"x-amz-abort-rule-id">>, <<"AbortRuleId">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Sets the accelerate configuration of an existing bucket. Amazon S3 %% Transfer Acceleration is a bucket-level feature that enables you to %% perform faster data transfers to Amazon S3. %% %% To use this operation, you must have permission to perform the %% `s3:PutAccelerateConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% The Transfer Acceleration state of a bucket can be set to one of the %% following two values: %% %% The GetBucketAccelerateConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html %% action returns the transfer acceleration state of a bucket. %% %% After setting the Transfer Acceleration state of a bucket to Enabled, it %% might take up to thirty minutes before the data transfer rates to the %% bucket increase. %% %% The name of the bucket used for Transfer Acceleration must be %% DNS-compliant and must not contain periods ("."). %% %% For more information about transfer acceleration, see Transfer %% Acceleration: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html. %% %% The following operations are related to %% `PutBucketAccelerateConfiguration': %% %% put_bucket_accelerate_configuration(Client, Bucket, Input) -> put_bucket_accelerate_configuration(Client, Bucket, Input, []). put_bucket_accelerate_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?accelerate"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the permissions on an existing bucket using access control lists %% (ACL). For more information, see Using ACLs: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html. To %% set the ACL of a bucket, you must have the `WRITE_ACP' permission. %% %% You can use one of the following two ways to set a bucket's %% permissions: %% %% You cannot specify access permission using both the body and %% the request headers. %% %% Depending on your application needs, you may choose to set the ACL on a %% bucket using either the request body or the headers. For example, if you %% have an existing application that updates a bucket ACL using the request %% body, then you can continue to use that approach. %% %% If your bucket uses the bucket owner enforced setting for S3 Object %% Ownership, ACLs are disabled and no longer affect permissions. You must %% use policies to grant access to your bucket and the objects in it. %% Requests to set ACLs or update ACLs fail and return the %% `AccessControlListNotSupported' error code. Requests to read ACLs are %% still supported. For more information, see Controlling object ownership: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html %% in the Amazon S3 User Guide. %% %%
Permissions
You can set access permissions by using one %% of the following methods: %% %% You can use either a canned ACL or specify access permissions %% explicitly. You cannot do both. %% %%
Grantee Values
You can specify the person (grantee) to %% whom you're assigning access rights (using request elements) in the %% following ways: %% %%
The following operations are related to %% `PutBucketAcl': %% %% put_bucket_acl(Client, Bucket, Input) -> put_bucket_acl(Client, Bucket, Input, []). put_bucket_acl(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?acl"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>}, {<<"x-amz-grant-write">>, <<"GrantWrite">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets an analytics configuration for the bucket (specified by the analytics %% configuration ID). You can have up to 1,000 analytics configurations per %% bucket. %% %% You can choose to have storage class analysis export analysis reports sent %% to a comma-separated values (CSV) flat file. See the `DataExport' %% request element. Reports are updated daily and are based on the object %% filters that you configure. When selecting data export, you specify a %% destination bucket and an optional destination prefix where the file is %% written. You can export the data to a destination bucket in a different %% account. However, the destination bucket must be in the same Region as the %% bucket that you are making the PUT analytics configuration to. For more %% information, see Amazon S3 Analytics – Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html. %% %% You must create a bucket policy on the destination bucket where the %% exported file is written to grant permissions to Amazon S3 to write %% objects to the bucket. For an example policy, see Granting Permissions for %% Amazon S3 Inventory and Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9. %% %% To use this operation, you must have permissions to perform the %% `s3:PutAnalyticsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% `PutBucketAnalyticsConfiguration' has the following special errors: %% %% The following operations are related to %% `PutBucketAnalyticsConfiguration': %% %% put_bucket_analytics_configuration(Client, Bucket, Input) -> put_bucket_analytics_configuration(Client, Bucket, Input, []). put_bucket_analytics_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?analytics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the `cors' configuration for your bucket. If the configuration %% exists, Amazon S3 replaces it. %% %% To use this operation, you must be allowed to perform the %% `s3:PutBucketCORS' action. By default, the bucket owner has this %% permission and can grant it to others. %% %% You set this configuration on a bucket so that the bucket can service %% cross-origin requests. For example, you might want to enable a request %% whose origin is `http://www.example.com' to access your Amazon S3 %% bucket at `my.example.bucket.com' by using the browser's %% `XMLHttpRequest' capability. %% %% To enable cross-origin resource sharing (CORS) on a bucket, you add the %% `cors' subresource to the bucket. The `cors' subresource is an XML %% document in which you configure rules that identify origins and the HTTP %% methods that can be executed on your bucket. The document is limited to 64 %% KB in size. %% %% When Amazon S3 receives a cross-origin request (or a pre-flight OPTIONS %% request) against a bucket, it evaluates the `cors' configuration on %% the bucket and uses the first `CORSRule' rule that matches the %% incoming browser request to enable a cross-origin request. For a rule to %% match, the following conditions must be met: %% %% For more information about CORS, go to Enabling Cross-Origin %% Resource Sharing: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html in the Amazon S3 %% User Guide. %% %% The following operations are related to `PutBucketCors': %% %% put_bucket_cors(Client, Bucket, Input) -> put_bucket_cors(Client, Bucket, Input, []). put_bucket_cors(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?cors"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, true} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This action uses the `encryption' subresource to configure default %% encryption and Amazon S3 Bucket Keys for an existing bucket. %% %% By default, all buckets have a default encryption configuration that uses %% server-side encryption with Amazon S3 managed keys (SSE-S3). You can %% optionally configure default encryption for a bucket by using server-side %% encryption with Key Management Service (KMS) keys (SSE-KMS) or dual-layer %% server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). If %% you specify default encryption by using SSE-KMS, you can also configure %% Amazon S3 Bucket Keys: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html. If you %% use PutBucketEncryption to set your default bucket encryption: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html to %% SSE-KMS, you should verify that your KMS key ID is correct. Amazon S3 does %% not validate the KMS key ID provided in PutBucketEncryption requests. %% %% This action requires Amazon Web Services Signature Version 4. For more %% information, see Authenticating Requests (Amazon Web Services Signature %% Version 4): %% https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html. %% %% To use this operation, you must have permission to perform the %% `s3:PutEncryptionConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %% The following operations are related to `PutBucketEncryption': %% %% put_bucket_encryption(Client, Bucket, Input) -> put_bucket_encryption(Client, Bucket, Input, []). put_bucket_encryption(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?encryption"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Puts a S3 Intelligent-Tiering configuration to the specified bucket. You %% can have up to 1,000 S3 Intelligent-Tiering configurations per bucket. %% %% The S3 Intelligent-Tiering storage class is designed to optimize storage %% costs by automatically moving data to the most cost-effective storage %% access tier, without performance impact or operational overhead. S3 %% Intelligent-Tiering delivers automatic cost savings in three low latency %% and high throughput access tiers. To get the lowest storage cost on data %% that can be accessed in minutes to hours, you can choose to activate %% additional archiving capabilities. %% %% The S3 Intelligent-Tiering storage class is the ideal storage class for %% data with unknown, changing, or unpredictable access patterns, independent %% of object size or retention period. If the size of an object is less than %% 128 KB, it is not monitored and not eligible for auto-tiering. Smaller %% objects can be stored, but they are always charged at the Frequent Access %% tier rates in the S3 Intelligent-Tiering storage class. %% %% For more information, see Storage class for automatically optimizing %% frequently and infrequently accessed objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access. %% %% Operations related to `PutBucketIntelligentTieringConfiguration' %% include: %% %% You only need S3 Intelligent-Tiering enabled on a bucket if %% you want to automatically move objects stored in the S3 %% Intelligent-Tiering storage class to the Archive Access or Deep Archive %% Access tier. %% %% `PutBucketIntelligentTieringConfiguration' has the following special %% errors: %% %%
HTTP 400 Bad Request Error
Code: InvalidArgument %% %% Cause: Invalid Argument %% %%
HTTP 400 Bad Request Error
Code: TooManyConfigurations %% %% Cause: You are attempting to create a new configuration but have already %% reached the 1,000-configuration limit. %% %%
HTTP 403 Forbidden Error
Cause: You are not the owner %% of the specified bucket, or you do not have the %% `s3:PutIntelligentTieringConfiguration' bucket permission to set the %% configuration on the bucket. %% %%
put_bucket_intelligent_tiering_configuration(Client, Bucket, Input) -> put_bucket_intelligent_tiering_configuration(Client, Bucket, Input, []). put_bucket_intelligent_tiering_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?intelligent-tiering"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], Headers = [], Input1 = Input0, CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% This implementation of the `PUT' action adds an inventory %% configuration (identified by the inventory ID) to the bucket. You can have %% up to 1,000 inventory configurations per bucket. %% %% Amazon S3 inventory generates inventories of the objects in the bucket on %% a daily or weekly basis, and the results are published to a flat file. The %% bucket that is inventoried is called the source bucket, and the bucket %% where the inventory flat file is stored is called the destination bucket. %% The destination bucket must be in the same Amazon Web Services Region as %% the source bucket. %% %% When you configure an inventory for a source bucket, you specify the %% destination bucket where you want the inventory to be stored, and whether %% to generate the inventory daily or weekly. You can also configure what %% object metadata to include and whether to inventory all object versions or %% only current versions. For more information, see Amazon S3 Inventory: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html in %% the Amazon S3 User Guide. %% %% You must create a bucket policy on the destination bucket to grant %% permissions to Amazon S3 to write objects to the bucket in the defined %% location. For an example policy, see Granting Permissions for Amazon S3 %% Inventory and Storage Class Analysis: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9. %% %%
Permissions
To use this operation, you must have %% permission to perform the `s3:PutInventoryConfiguration' action. The %% bucket owner has this permission by default and can grant this permission %% to others. %% %% The `s3:PutInventoryConfiguration' permission allows a user to create %% an S3 Inventory: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html %% report that includes all object metadata fields available and to specify %% the destination bucket to store the inventory. A user with read access to %% objects in the destination bucket can also access all object metadata %% fields that are available in the inventory report. %% %% To restrict access to an inventory report, see Restricting access to an %% Amazon S3 Inventory report: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-10 %% in the Amazon S3 User Guide. For more information about the metadata %% fields available in S3 Inventory, see Amazon S3 Inventory lists: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html#storage-inventory-contents %% in the Amazon S3 User Guide. For more information about permissions, see %% Permissions related to bucket subresource operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Identity and access management in Amazon S3: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %%
`PutBucketInventoryConfiguration' has the following %% special errors: %% %%
HTTP 400 Bad Request Error
Code: InvalidArgument %% %% Cause: Invalid Argument %% %%
HTTP 400 Bad Request Error
Code: TooManyConfigurations %% %% Cause: You are attempting to create a new configuration but have already %% reached the 1,000-configuration limit. %% %%
HTTP 403 Forbidden Error
Cause: You are not the owner %% of the specified bucket, or you do not have the %% `s3:PutInventoryConfiguration' bucket permission to set the %% configuration on the bucket. %% %%
The following operations are related to %% `PutBucketInventoryConfiguration': %% %% put_bucket_inventory_configuration(Client, Bucket, Input) -> put_bucket_inventory_configuration(Client, Bucket, Input, []). put_bucket_inventory_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?inventory"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% For an updated version of this API, see PutBucketLifecycleConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html. %% This version has been deprecated. Existing lifecycle configurations will %% work. For new lifecycle configurations, use the updated API. %% %% Creates a new lifecycle configuration for the bucket or replaces an %% existing lifecycle configuration. For information about lifecycle %% configuration, see Object Lifecycle Management: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html %% in the Amazon S3 User Guide. %% %% By default, all Amazon S3 resources, including buckets, objects, and %% related subresources (for example, lifecycle configuration and website %% configuration) are private. Only the resource owner, the Amazon Web %% Services account that created the resource, can access it. The resource %% owner can optionally grant access permissions to others by writing an %% access policy. For this operation, users must get the %% `s3:PutLifecycleConfiguration' permission. %% %% You can also explicitly deny permissions. Explicit denial also supersedes %% any other permissions. If you want to prevent users or accounts from %% removing or deleting objects from your bucket, you must deny them %% permissions for the following actions: %% %% For more information about permissions, see Managing Access %% Permissions to your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %% For more examples of transitioning objects to storage classes such as %% STANDARD_IA or ONEZONE_IA, see Examples of Lifecycle Configuration: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#lifecycle-configuration-examples. %% %% The following operations are related to `PutBucketLifecycle': %% %% put_bucket_lifecycle(Client, Bucket, Input) -> put_bucket_lifecycle(Client, Bucket, Input, []). put_bucket_lifecycle(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?lifecycle"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, true} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Creates a new lifecycle configuration for the bucket or replaces an %% existing lifecycle configuration. Keep in mind that this will overwrite an %% existing lifecycle configuration, so if you want to retain any %% configuration details, they must be included in the new lifecycle %% configuration. For information about lifecycle configuration, see Managing %% your storage lifecycle: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html. %% %% Bucket lifecycle configuration now supports specifying a lifecycle rule %% using an object key name prefix, one or more object tags, or a combination %% of both. Accordingly, this section describes the latest API. The previous %% version of the API supported filtering based only on an object key name %% prefix, which is supported for backward compatibility. For the related API %% description, see PutBucketLifecycle: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html. %% %%
Rules
You specify the lifecycle configuration in your %% request body. The lifecycle configuration is specified as XML consisting %% of one or more rules. An Amazon S3 Lifecycle configuration can have up to %% 1,000 rules. This limit is not adjustable. Each rule consists of the %% following: %% %% For more information, see Object Lifecycle Management: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html %% and Lifecycle Configuration Elements: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html. %% %%
Permissions
By default, all Amazon S3 resources are %% private, including buckets, objects, and related subresources (for %% example, lifecycle configuration and website configuration). Only the %% resource owner (that is, the Amazon Web Services account that created it) %% can access the resource. The resource owner can optionally grant access %% permissions to others by writing an access policy. For this operation, a %% user must get the `s3:PutLifecycleConfiguration' permission. %% %% You can also explicitly deny permissions. An explicit deny also supersedes %% any other permissions. If you want to block users or accounts from %% removing or deleting objects from your bucket, you must deny them %% permissions for the following actions: %% %% For more information about permissions, see Managing Access %% Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %%
The following operations are related to %% `PutBucketLifecycleConfiguration': %% %% put_bucket_lifecycle_configuration(Client, Bucket, Input) -> put_bucket_lifecycle_configuration(Client, Bucket, Input, []). put_bucket_lifecycle_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?lifecycle"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Set the logging parameters for a bucket and to specify permissions for who %% can view and modify the logging parameters. All logs are saved to buckets %% in the same Amazon Web Services Region as the source bucket. To set the %% logging status of a bucket, you must be the bucket owner. %% %% The bucket owner is automatically granted FULL_CONTROL to all logs. You %% use the `Grantee' request element to grant access to other people. The %% `Permissions' request element specifies the kind of access the grantee %% has to the logs. %% %% If the target bucket for log delivery uses the bucket owner enforced %% setting for S3 Object Ownership, you can't use the `Grantee' %% request element to grant access to others. Permissions can only be granted %% using policies. For more information, see Permissions for server access %% log delivery: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html#grant-log-delivery-permissions-general %% in the Amazon S3 User Guide. %% %%
Grantee Values
You can specify the person (grantee) to %% whom you're assigning access rights (by using request elements) in the %% following ways: %% %%
To enable logging, you use `LoggingEnabled' %% and its children request elements. To disable logging, you use an empty %% `BucketLoggingStatus' request element: %% %% `<BucketLoggingStatus %% xmlns="http://doc.s3.amazonaws.com/2006-03-01" />' %% %% For more information about server access logging, see Server Access %% Logging: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html in %% the Amazon S3 User Guide. %% %% For more information about creating a bucket, see CreateBucket: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html. For %% more information about returning the logging status of a bucket, see %% GetBucketLogging: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html. %% %% The following operations are related to `PutBucketLogging': %% %% put_bucket_logging(Client, Bucket, Input) -> put_bucket_logging(Client, Bucket, Input, []). put_bucket_logging(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?logging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets a metrics configuration (specified by the metrics configuration ID) %% for the bucket. You can have up to 1,000 metrics configurations per %% bucket. If you're updating an existing metrics configuration, note %% that this is a full replacement of the existing metrics configuration. If %% you don't include the elements you want to keep, they are erased. %% %% To use this operation, you must have permissions to perform the %% `s3:PutMetricsConfiguration' action. The bucket owner has this %% permission by default. The bucket owner can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% For information about CloudWatch request metrics for Amazon S3, see %% Monitoring Metrics with Amazon CloudWatch: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html. %% %% The following operations are related to %% `PutBucketMetricsConfiguration': %% %% `PutBucketMetricsConfiguration' has the following special %% error: %% %% put_bucket_metrics_configuration(Client, Bucket, Input) -> put_bucket_metrics_configuration(Client, Bucket, Input, []). put_bucket_metrics_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?metrics"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"id">>, <<"Id">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% No longer used, see the PutBucketNotificationConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html %% operation. put_bucket_notification(Client, Bucket, Input) -> put_bucket_notification(Client, Bucket, Input, []). put_bucket_notification(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?notification"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Enables notifications of specified events for a bucket. For more %% information about event notifications, see Configuring Event %% Notifications: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html. %% %% Using this API, you can replace an existing notification configuration. %% The configuration is an XML file that defines the event types that you %% want Amazon S3 to publish and the destination where you want Amazon S3 to %% publish an event notification when it detects an event of the specified %% type. %% %% By default, your bucket has no event notifications configured. That is, %% the notification configuration will be an empty %% `NotificationConfiguration'. %% %% `<NotificationConfiguration>' %% %% `</NotificationConfiguration>' %% %% This action replaces the existing notification configuration with the %% configuration you include in the request body. %% %% After Amazon S3 receives this request, it first verifies that any Amazon %% Simple Notification Service (Amazon SNS) or Amazon Simple Queue Service %% (Amazon SQS) destination exists, and that the bucket owner has permission %% to publish to it by sending a test notification. In the case of Lambda %% destinations, Amazon S3 verifies that the Lambda function permissions %% grant Amazon S3 permission to invoke the function from the Amazon S3 %% bucket. For more information, see Configuring Notifications for Amazon S3 %% Events: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html. %% %% You can disable notifications by adding the empty %% NotificationConfiguration element. %% %% For more information about the number of event notification configurations %% that you can create per bucket, see Amazon S3 service quotas: %% https://docs.aws.amazon.com/general/latest/gr/s3.html#limits_s3 in Amazon %% Web Services General Reference. %% %% By default, only the bucket owner can configure notifications on a bucket. %% However, bucket owners can use a bucket policy to grant permission to %% other users to set this configuration with the required %% `s3:PutBucketNotification' permission. %% %% The PUT notification is an atomic operation. For example, suppose your %% notification configuration includes SNS topic, SQS queue, and Lambda %% function configurations. When you send a PUT request with this %% configuration, Amazon S3 sends test messages to your SNS topic. If the %% message fails, the entire PUT action will fail, and Amazon S3 will not add %% the configuration to your bucket. %% %% If the configuration in the request body includes only one %% `TopicConfiguration' specifying only the %% `s3:ReducedRedundancyLostObject' event type, the response will also %% include the `x-amz-sns-test-message-id' header containing the message %% ID of the test notification sent to the topic. %% %% The following action is related to %% `PutBucketNotificationConfiguration': %% %% put_bucket_notification_configuration(Client, Bucket, Input) -> put_bucket_notification_configuration(Client, Bucket, Input, []). put_bucket_notification_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?notification"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-skip-destination-validation">>, <<"SkipDestinationValidation">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Creates or modifies `OwnershipControls' for an Amazon S3 bucket. To %% use this operation, you must have the `s3:PutBucketOwnershipControls' %% permission. For more information about Amazon S3 permissions, see %% Specifying permissions in a policy: %% https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-with-s3-actions.html. %% %% For information about Amazon S3 Object Ownership, see Using object %% ownership: %% https://docs.aws.amazon.com/AmazonS3/latest/user-guide/about-object-ownership.html. %% %% The following operations are related to `PutBucketOwnershipControls': %% %% put_bucket_ownership_controls(Client, Bucket, Input) -> put_bucket_ownership_controls(Client, Bucket, Input, []). put_bucket_ownership_controls(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?ownershipControls"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc Applies an Amazon S3 bucket policy to an Amazon S3 bucket. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Regional endpoint. These endpoints support path-style %% requests in the format %% `https://s3express-control.region_code.amazonaws.com/bucket-name '. %% Virtual-hosted-style requests aren't supported. For more information, %% see Regional and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
If you are using an identity other than the %% root user of the Amazon Web Services account that owns the bucket, the %% calling identity must both have the `PutBucketPolicy' permissions on %% the specified bucket and belong to the bucket owner's account in order %% to use this operation. %% %% If you don't have `PutBucketPolicy' permissions, Amazon S3 returns %% a `403 Access Denied' error. If you have the correct permissions, but %% you're not using an identity that belongs to the bucket owner's %% account, Amazon S3 returns a `405 Method Not Allowed' error. %% %% To ensure that bucket owners don't inadvertently lock themselves out %% of their own buckets, the root principal in a bucket owner's Amazon %% Web Services account can perform the `GetBucketPolicy', %% `PutBucketPolicy', and `DeleteBucketPolicy' API actions, even if %% their bucket policy explicitly denies the root principal's access. %% Bucket owner root principals can only be blocked from performing these API %% actions by VPC endpoint policies and Amazon Web Services Organizations %% policies. %% %%
Example bucket policies
General purpose %% buckets example bucket policies - See Bucket policy examples: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html %% in the Amazon S3 User Guide. %% %% Directory bucket example bucket policies - See Example bucket policies for %% S3 Express One Zone: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html %% in the Amazon S3 User Guide. %% %%
HTTP Host header syntax
Directory buckets - The HTTP %% Host header syntax is `s3express-control.region.amazonaws.com'. %% %%
The following operations are related to `PutBucketPolicy': %% %% put_bucket_policy(Client, Bucket, Input) -> put_bucket_policy(Client, Bucket, Input, []). put_bucket_policy(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?policy"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-confirm-remove-self-bucket-access">>, <<"ConfirmRemoveSelfBucketAccess">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Creates a replication configuration or replaces an existing one. For more %% information, see Replication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html in the %% Amazon S3 User Guide. %% %% Specify the replication configuration in the request body. In the %% replication configuration, you provide the name of the destination bucket %% or buckets where you want Amazon S3 to replicate objects, the IAM role %% that Amazon S3 can assume to replicate objects on your behalf, and other %% relevant information. You can invoke this request for a specific Amazon %% Web Services Region by using the `aws:RequestedRegion' : %% https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion %% condition key. %% %% A replication configuration must include at least one rule, and can %% contain a maximum of 1,000. Each rule identifies a subset of objects to %% replicate by filtering the objects in the source bucket. To choose %% additional subsets of objects to replicate, add a rule for each subset. %% %% To specify a subset of the objects in the source bucket to apply a %% replication rule to, add the Filter element as a child of the Rule %% element. You can filter objects based on an object key prefix, one or more %% object tags, or both. When you add the Filter element in the %% configuration, you must also add the following elements: %% `DeleteMarkerReplication', `Status', and `Priority'. %% %% If you are using an earlier version of the replication configuration, %% Amazon S3 handles replication of delete markers differently. For more %% information, see Backward Compatibility: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations. %% %% For information about enabling versioning on a bucket, see Using %% Versioning: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html. %% %%
Handling Replication of Encrypted Objects
By default, %% Amazon S3 doesn't replicate objects that are stored at rest using %% server-side encryption with KMS keys. To replicate Amazon Web Services %% KMS-encrypted objects, add the following: `SourceSelectionCriteria', %% `SseKmsEncryptedObjects', `Status', `EncryptionConfiguration', %% and `ReplicaKmsKeyID'. For information about replication %% configuration, see Replicating Objects Created with SSE Using KMS keys: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html. %% %% For information on `PutBucketReplication' errors, see List of %% replication-related error codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList %% %%
Permissions
To create a `PutBucketReplication' %% request, you must have `s3:PutReplicationConfiguration' permissions %% for the bucket. %% %% By default, a resource owner, in this case the Amazon Web Services account %% that created the bucket, can perform this operation. The resource owner %% can also grant others permissions to perform the operation. For more %% information about permissions, see Specifying Permissions in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% To perform this operation, the user or role performing the action must %% have the iam:PassRole: %% https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html %% permission. %% %%
The following operations are related to %% `PutBucketReplication': %% %% put_bucket_replication(Client, Bucket, Input) -> put_bucket_replication(Client, Bucket, Input, []). put_bucket_replication(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?replication"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-bucket-object-lock-token">>, <<"Token">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the request payment configuration for a bucket. By default, the %% bucket owner pays for downloads from the bucket. This configuration %% parameter enables the bucket owner (only) to specify that the person %% requesting the download will be charged for the download. For more %% information, see Requester Pays Buckets: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html. %% %% The following operations are related to `PutBucketRequestPayment': %% %% put_bucket_request_payment(Client, Bucket, Input) -> put_bucket_request_payment(Client, Bucket, Input, []). put_bucket_request_payment(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?requestPayment"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the tags for a bucket. %% %% Use tags to organize your Amazon Web Services bill to reflect your own %% cost structure. To do this, sign up to get your Amazon Web Services %% account bill with tag key values included. Then, to see the cost of %% combined resources, organize your billing information according to %% resources with the same tag key values. For example, you can tag several %% resources with a specific application name, and then organize your billing %% information to see the total cost of that application across several %% services. For more information, see Cost Allocation and Tagging: %% https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html %% and Using Cost Allocation in Amazon S3 Bucket Tags: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html. %% %% When this operation sets the tags for a bucket, it will overwrite any %% current tags the bucket already has. You cannot use this operation to add %% tags to an existing list of tags. %% %% To use this operation, you must have permissions to perform the %% `s3:PutBucketTagging' action. The bucket owner has this permission by %% default and can grant this permission to others. For more information %% about permissions, see Permissions Related to Bucket Subresource %% Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html. %% %% `PutBucketTagging' has the following special errors. For more Amazon %% S3 errors see, Error Responses: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html. %% %% The following operations are related to %% `PutBucketTagging': %% %% put_bucket_tagging(Client, Bucket, Input) -> put_bucket_tagging(Client, Bucket, Input, []). put_bucket_tagging(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?tagging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, true} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the versioning state of an existing bucket. %% %% You can set the versioning state with one of the following values: %% %% Enabled—Enables versioning for the objects in the bucket. All objects %% added to the bucket receive a unique version ID. %% %% Suspended—Disables versioning for the objects in the bucket. All objects %% added to the bucket receive the version ID null. %% %% If the versioning state has never been set on a bucket, it has no %% versioning state; a GetBucketVersioning: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html %% request does not return a versioning state value. %% %% In order to enable MFA Delete, you must be the bucket owner. If you are %% the bucket owner and want to enable MFA Delete in the bucket versioning %% configuration, you must include the `x-amz-mfa request' header and the %% `Status' and the `MfaDelete' request elements in a request to set %% the versioning state of the bucket. %% %% If you have an object expiration lifecycle configuration in your %% non-versioned bucket and you want to maintain the same permanent delete %% behavior when you enable versioning, you must add a noncurrent expiration %% policy. The noncurrent expiration lifecycle configuration will manage the %% deletes of the noncurrent object versions in the version-enabled bucket. %% (A version-enabled bucket maintains one current and zero or more %% noncurrent object versions.) For more information, see Lifecycle and %% Versioning: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config. %% %% The following operations are related to `PutBucketVersioning': %% %% put_bucket_versioning(Client, Bucket, Input) -> put_bucket_versioning(Client, Bucket, Input, []). put_bucket_versioning(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?versioning"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-mfa">>, <<"MFA">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Sets the configuration of the website that is specified in the %% `website' subresource. To configure a bucket as a website, you can add %% this subresource on the bucket with website configuration information such %% as the file name of the index document and any redirect rules. For more %% information, see Hosting Websites on Amazon S3: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html. %% %% This PUT action requires the `S3:PutBucketWebsite' permission. By %% default, only the bucket owner can configure the website attached to a %% bucket; however, bucket owners can allow other users to set the website %% configuration by writing a bucket policy that grants them the %% `S3:PutBucketWebsite' permission. %% %% To redirect all website requests sent to the bucket's website %% endpoint, you add a website configuration with the following elements. %% Because all requests are sent to another website, you don't need to %% provide index document name for the bucket. %% %% If you want granular control over redirects, you can use the %% following elements to add routing rules that describe conditions for %% redirecting requests and information about the redirect destination. In %% this case, the website configuration must provide an index document for %% the bucket, because some requests might not be redirected. %% %% Amazon S3 has a limitation of 50 routing rules per website %% configuration. If you require more than 50 routing rules, you can use %% object redirect. For more information, see Configuring an Object Redirect: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html %% in the Amazon S3 User Guide. %% %% The maximum request length is limited to 128 KB. put_bucket_website(Client, Bucket, Input) -> put_bucket_website(Client, Bucket, Input, []). put_bucket_website(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?website"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc Adds an object to a bucket. %% %% Amazon S3 never adds partial objects; if you receive a success response, %% Amazon S3 added the entire object to the bucket. You cannot use %% `PutObject' to only update a single piece of metadata for an existing %% object. You must put the entire object with updated metadata if you want %% to update some values. %% %% If your bucket uses the bucket owner enforced setting for Object %% Ownership, ACLs are disabled and no longer affect permissions. All objects %% written to the bucket by any account will be owned by the bucket owner. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %% Amazon S3 is a distributed system. If it receives multiple write requests %% for the same object simultaneously, it overwrites all but the last object %% written. However, Amazon S3 provides features that can modify this %% behavior: %% %%
Permissions
Data integrity with Content-MD5
HTTP Host header syntax
Directory buckets %% - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
For more information about related Amazon S3 APIs, see the %% following: %% %% put_object(Client, Bucket, Key, Input) -> put_object(Client, Bucket, Key, Input, []). put_object(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, true}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"Content-Type">>, <<"ContentType">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-tagging">>, <<"Tagging">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-website-redirect-location">>, <<"WebsiteRedirectLocation">>}, {<<"Content-Language">>, <<"ContentLanguage">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"Content-Encoding">>, <<"ContentEncoding">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"Expires">>, <<"Expires">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"Content-Length">>, <<"ContentLength">>}, {<<"x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"Content-Disposition">>, <<"ContentDisposition">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeadersMapping = [ {<<"x-amz-meta-">>, <<"Metadata">>} ], {CustomHeaders, Input2} = aws_request:build_custom_headers(CustomHeadersMapping, Input1), Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"ETag">>, <<"ETag">>}, {<<"x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-context">>, <<"SSEKMSEncryptionContext">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Uses the `acl' subresource to set the access control list (ACL) %% permissions for a new or existing object in an S3 bucket. You must have %% the `WRITE_ACP' permission to set the ACL of an object. For more %% information, see What permissions can I grant?: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions %% in the Amazon S3 User Guide. %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% Depending on your application needs, you can choose to set the ACL on an %% object using either the request body or the headers. For example, if you %% have an existing application that updates a bucket ACL using the request %% body, you can continue to use that approach. For more information, see %% Access Control List (ACL) Overview: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html in the %% Amazon S3 User Guide. %% %% If your bucket uses the bucket owner enforced setting for S3 Object %% Ownership, ACLs are disabled and no longer affect permissions. You must %% use policies to grant access to your bucket and the objects in it. %% Requests to set ACLs or update ACLs fail and return the %% `AccessControlListNotSupported' error code. Requests to read ACLs are %% still supported. For more information, see Controlling object ownership: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html %% in the Amazon S3 User Guide. %% %%
Permissions
You can set access permissions using one of %% the following methods: %% %% You can use either a canned ACL or specify access permissions %% explicitly. You cannot do both. %% %%
Grantee Values
You can specify the person (grantee) to %% whom you're assigning access rights (using request elements) in the %% following ways: %% %%
Versioning
The ACL of an object is set at %% the object version level. By default, PUT sets the ACL of the current %% version of an object. To set the ACL of a different version, use the %% `versionId' subresource. %% %%
The following operations are related to `PutObjectAcl': %% %% put_object_acl(Client, Bucket, Key, Input) -> put_object_acl(Client, Bucket, Key, Input, []). put_object_acl(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?acl"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-acl">>, <<"ACL">>}, {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-grant-full-control">>, <<"GrantFullControl">>}, {<<"x-amz-grant-read">>, <<"GrantRead">>}, {<<"x-amz-grant-read-acp">>, <<"GrantReadACP">>}, {<<"x-amz-grant-write">>, <<"GrantWrite">>}, {<<"x-amz-grant-write-acp">>, <<"GrantWriteACP">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Applies a legal hold configuration to the specified object. For more %% information, see Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. %% %% This functionality is not supported for Amazon S3 on Outposts. put_object_legal_hold(Client, Bucket, Key, Input) -> put_object_legal_hold(Client, Bucket, Key, Input, []). put_object_legal_hold(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?legal-hold"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Places an Object Lock configuration on the specified bucket. The rule %% specified in the Object Lock configuration will be applied by default to %% every new object placed in the specified bucket. For more information, see %% Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. %% %% The `DefaultRetention' settings require both a mode and a period. %% %% The `DefaultRetention' period can be either `Days' or `Years' %% but you must select one. You cannot specify `Days' and `Years' at %% the same time. %% %% You can enable Object Lock for new or existing buckets. For more %% information, see Configuring Object Lock: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html. put_object_lock_configuration(Client, Bucket, Input) -> put_object_lock_configuration(Client, Bucket, Input, []). put_object_lock_configuration(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?object-lock"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-bucket-object-lock-token">>, <<"Token">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Places an Object Retention configuration on an object. For more %% information, see Locking Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html. Users or %% accounts require the `s3:PutObjectRetention' permission in order to %% place an Object Retention configuration on objects. Bypassing a Governance %% Retention configuration requires the `s3:BypassGovernanceRetention' %% permission. %% %% This functionality is not supported for Amazon S3 on Outposts. put_object_retention(Client, Bucket, Key, Input) -> put_object_retention(Client, Bucket, Key, Input, []). put_object_retention(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?retention"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-bypass-governance-retention">>, <<"BypassGovernanceRetention">>}, {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Sets the supplied tag-set to an object that already exists in a bucket. A %% tag is a key-value pair. For more information, see Object Tagging: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html. %% %% You can associate tags with an object by sending a PUT request against the %% tagging subresource that is associated with the object. You can retrieve %% tags by sending a GET request. For more information, see GetObjectTagging: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html. %% %% For tagging-related restrictions related to characters and encodings, see %% Tag Restrictions: %% https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html. %% Note that Amazon S3 limits the maximum number of tags to 10 tags per %% object. %% %% To use this operation, you must have permission to perform the %% `s3:PutObjectTagging' action. By default, the bucket owner has this %% permission and can grant this permission to others. %% %% To put tags of any other version, use the `versionId' query parameter. %% You also need permission for the `s3:PutObjectVersionTagging' action. %% %% `PutObjectTagging' has the following special errors. For more Amazon %% S3 errors see, Error Responses: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html. %% %% The following operations are related to %% `PutObjectTagging': %% %% put_object_tagging(Client, Bucket, Key, Input) -> put_object_tagging(Client, Bucket, Key, Input, []). put_object_tagging(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?tagging"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-version-id">>, <<"VersionId">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Creates or modifies the `PublicAccessBlock' configuration for an %% Amazon S3 bucket. To use this operation, you must have the %% `s3:PutBucketPublicAccessBlock' permission. For more information about %% Amazon S3 permissions, see Specifying Permissions in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html. %% %% When Amazon S3 evaluates the `PublicAccessBlock' configuration for a %% bucket or an object, it checks the `PublicAccessBlock' configuration %% for both the bucket (or the bucket that contains the object) and the %% bucket owner's account. If the `PublicAccessBlock' configurations %% are different between the bucket and the account, Amazon S3 uses the most %% restrictive combination of the bucket-level and account-level settings. %% %% For more information about when Amazon S3 considers a bucket or an object %% public, see The Meaning of "Public": %% https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status. %% %% The following operations are related to `PutPublicAccessBlock': %% %% put_public_access_block(Client, Bucket, Input) -> put_public_access_block(Client, Bucket, Input, []). put_public_access_block(Client, Bucket, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "?publicAccessBlock"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc This operation is not supported by directory buckets. %% %% Restores an archived copy of an object back into Amazon S3 %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% This action performs the following types of requests: %% %% For more information about the `S3' structure in the %% request body, see the following: %% %% Define the SQL expression for the `SELECT' type of %% restoration for your query in the request body's %% `SelectParameters' structure. You can use expressions like the %% following examples. %% %% When making a select request, you can also do the following: %% %% The following are additional important facts about the select %% feature: %% %%
Permissions
To use this operation, you must %% have permissions to perform the `s3:RestoreObject' action. The bucket %% owner has this permission by default and can grant this permission to %% others. For more information about permissions, see Permissions Related to %% Bucket Subresource Operations: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources %% and Managing Access Permissions to Your Amazon S3 Resources: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html %% in the Amazon S3 User Guide. %% %%
Restoring objects
Objects that you archive to the S3 %% Glacier Flexible Retrieval Flexible Retrieval or S3 Glacier Deep Archive %% storage class, and S3 Intelligent-Tiering Archive or S3 %% Intelligent-Tiering Deep Archive tiers, are not accessible in real time. %% For objects in the S3 Glacier Flexible Retrieval Flexible Retrieval or S3 %% Glacier Deep Archive storage classes, you must first initiate a restore %% request, and then wait until a temporary copy of the object is available. %% If you want a permanent copy of the object, create a copy of it in the %% Amazon S3 Standard storage class in your S3 bucket. To access an archived %% object, you must restore the object for the duration (number of days) that %% you specify. For objects in the Archive Access or Deep Archive Access %% tiers of S3 Intelligent-Tiering, you must first initiate a restore %% request, and then wait until the object is moved into the Frequent Access %% tier. %% %% To restore a specific object version, you can provide a version ID. If you %% don't provide a version ID, Amazon S3 restores the current version. %% %% When restoring an archived object, you can specify one of the following %% data access tier options in the `Tier' element of the request body: %% %% For more information about archive retrieval options and %% provisioned capacity for `Expedited' data access, see Restoring %% Archived Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html in %% the Amazon S3 User Guide. %% %% You can use Amazon S3 restore speed upgrade to change the restore speed to %% a faster speed while it is in progress. For more information, see %% Upgrading the speed of an in-progress restore: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html %% in the Amazon S3 User Guide. %% %% To get the status of object restoration, you can send a `HEAD' %% request. Operations return the `x-amz-restore' header, which provides %% information about the restoration status, in the response. You can use %% Amazon S3 event notifications to notify you when a restore is initiated or %% completed. For more information, see Configuring Amazon S3 Event %% Notifications: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in %% the Amazon S3 User Guide. %% %% After restoring an archived object, you can update the restoration period %% by reissuing the request with a new period. Amazon S3 updates the %% restoration period relative to the current time and charges only for the %% request-there are no data transfer charges. You cannot update the %% restoration period when Amazon S3 is actively processing your current %% restore request for the object. %% %% If your bucket has a lifecycle configuration with a rule that includes an %% expiration action, the object expiration overrides the life span that you %% specify in a restore request. For example, if you restore an object copy %% for 10 days, but the object is scheduled to expire in 3 days, Amazon S3 %% deletes the object in 3 days. For more information about lifecycle %% configuration, see PutBucketLifecycleConfiguration: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html %% and Object Lifecycle Management: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html %% in Amazon S3 User Guide. %% %%
Responses
A successful action returns either the `200 %% OK' or `202 Accepted' status code. %% %%
The following operations are related %% to `RestoreObject': %% %% restore_object(Client, Bucket, Key, Input) -> restore_object(Client, Bucket, Key, Input, []). restore_object(Client, Bucket, Key, Input0, Options0) -> Method = post, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?restore"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"versionId">>, <<"VersionId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-restore-output-path">>, <<"RestoreOutputPath">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% This action filters the contents of an Amazon S3 object based on a simple %% structured query language (SQL) statement. In the request, along with the %% SQL expression, you must also specify a data serialization format (JSON, %% CSV, or Apache Parquet) of the object. Amazon S3 uses this format to parse %% object data into records, and returns only records that match the %% specified SQL expression. You must also specify the data serialization %% format for the response. %% %% This functionality is not supported for Amazon S3 on Outposts. %% %% For more information about Amazon S3 Select, see Selecting Content from %% Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html %% and SELECT Command: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-select.html %% in the Amazon S3 User Guide. %% %%
Permissions
You must have the `s3:GetObject' %% permission for this operation. Amazon S3 Select does not support anonymous %% access. For more information about permissions, see Specifying Permissions %% in a Policy: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html %% in the Amazon S3 User Guide. %% %%
Object Data Formats
You can use Amazon S3 Select to %% query objects that have the following format properties: %% %%
Working with the Response Body
Given the %% response size is unknown, Amazon S3 Select streams the response as a %% series of messages and includes a `Transfer-Encoding' header with %% `chunked' as its value in the response. For more information, see %% Appendix: SelectObjectContent Response: %% https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html. %% %%
GetObject Support
The `SelectObjectContent' action %% does not support the following `GetObject' functionality. For more %% information, see GetObject: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html. %% %%
Special Errors
For a list of special %% errors for this operation, see List of SELECT Object Content Error Codes: %% https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList %% %%
The following operations are related to %% `SelectObjectContent': %% %% select_object_content(Client, Bucket, Key, Input) -> select_object_content(Client, Bucket, Key, Input, []). select_object_content(Client, Bucket, Key, Input0, Options0) -> Method = post, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), "?select&select-type=2"], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %% @doc Uploads a part in a multipart upload. %% %% In this operation, you provide new data as a part of an object in your %% request. However, you have an option to specify your existing Amazon S3 %% object as a data source for the part you are uploading. To upload a part %% from an existing object, you use the UploadPartCopy: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html %% operation. %% %% You must initiate a multipart upload (see CreateMultipartUpload: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) %% before you can upload any part. In response to your initiate request, %% Amazon S3 returns an upload ID, a unique identifier that you must include %% in your upload part request. %% %% Part numbers can be any number from 1 to 10,000, inclusive. A part number %% uniquely identifies a part and also defines its position within the object %% being created. If you upload a new part using the same part number that %% was used with a previous part, the previously uploaded part is %% overwritten. %% %% For information about maximum and minimum part sizes and other multipart %% upload specifications, see Multipart upload limits: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html in the %% Amazon S3 User Guide. %% %% After you initiate multipart upload and upload one or more parts, you must %% either complete or abort multipart upload in order to stop getting charged %% for storage of the uploaded parts. Only after you either complete or abort %% multipart upload, Amazon S3 frees up the parts storage and stops charging %% you for the parts storage. %% %% For more information on multipart uploads, go to Multipart Upload %% Overview: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html %% in the Amazon S3 User Guide . %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Permissions
Data integrity
General purpose bucket - To %% ensure that data is not corrupted traversing the network, specify the %% `Content-MD5' header in the upload part request. Amazon S3 checks the %% part data against the provided MD5 value. If they do not match, Amazon S3 %% returns an error. If the upload request is signed with Signature Version %% 4, then Amazon Web Services S3 uses the `x-amz-content-sha256' header %% as a checksum instead of `Content-MD5'. For more information see %% Authenticating Requests: Using the Authorization Header (Amazon Web %% Services Signature Version 4): %% https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html. %% %% Directory buckets - MD5 is not supported by directory buckets. You can use %% checksum algorithms to check object integrity. %% %%
Encryption
For more information, see Using Server-Side Encryption: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html %% in the Amazon S3 User Guide. %% %%
Special errors
HTTP Host header syntax
%% Directory buckets - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `UploadPart': %% %% upload_part(Client, Bucket, Key, Input) -> upload_part(Client, Bucket, Key, Input, []). upload_part(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, true}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-sdk-checksum-algorithm">>, <<"ChecksumAlgorithm">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"Content-Length">>, <<"ContentLength">>}, {<<"Content-MD5">>, <<"ContentMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"partNumber">>, <<"PartNumber">>}, {<<"uploadId">>, <<"UploadId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-checksum-sha1">>, <<"ChecksumSHA1">>}, {<<"x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"ETag">>, <<"ETag">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc Uploads a part by copying data from an existing object as data %% source. %% %% To specify the data source, you add the request header %% `x-amz-copy-source' in your request. To specify a byte range, you add %% the request header `x-amz-copy-source-range' in your request. %% %% For information about maximum and minimum part sizes and other multipart %% upload specifications, see Multipart upload limits: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html in the %% Amazon S3 User Guide. %% %% Instead of copying data from an existing object as part data, you might %% use the UploadPart: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html action %% to upload new data as a part of an object in your request. %% %% You must initiate a multipart upload before you can upload any part. In %% response to your initiate request, Amazon S3 returns the upload ID, a %% unique identifier that you must include in your upload part request. %% %% For conceptual information about multipart uploads, see Uploading Objects %% Using Multipart Upload: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html in %% the Amazon S3 User Guide. For information about copying objects using a %% single atomic action vs. a multipart upload, see Operations on Objects: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html in %% the Amazon S3 User Guide. %% %% Directory buckets - For directory buckets, you must make requests for this %% API operation to the Zonal endpoint. These endpoints support %% virtual-hosted-style requests in the format %% `https://bucket_name.s3express-az_id.region.amazonaws.com/key-name '. %% Path-style requests are not supported. For more information, see Regional %% and Zonal endpoints: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html %% in the Amazon S3 User Guide. %% %%
Authentication and authorization
All %% `UploadPartCopy' requests must be authenticated and signed by using %% IAM credentials (access key ID and secret access key for the IAM %% identities). All headers with the `x-amz-' prefix, including %% `x-amz-copy-source', must be signed. For more information, see REST %% Authentication: %% https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html. %% %% Directory buckets - You must use IAM credentials to authenticate and %% authorize your access to the `UploadPartCopy' API operation, instead %% of using the temporary security credentials through the %% `CreateSession' API operation. %% %% Amazon Web Services CLI or SDKs handles authentication and authorization %% on your behalf. %% %%
Permissions
You must have `READ' access to the %% source object and `WRITE' access to the destination bucket. %% %%
Encryption
Special errors
HTTP Host header syntax
%% Directory buckets - The HTTP Host header syntax is ` %% Bucket_name.s3express-az_id.region.amazonaws.com'. %% %%
The following operations are related to `UploadPartCopy': %% %% upload_part_copy(Client, Bucket, Key, Input) -> upload_part_copy(Client, Bucket, Key, Input, []). upload_part_copy(Client, Bucket, Key, Input0, Options0) -> Method = put, Path = ["/", aws_util:encode_uri(Bucket), "/", aws_util:encode_multi_segment_uri(Key), ""], SuccessStatusCode = undefined, Options = [{send_body_as_binary, false}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-copy-source">>, <<"CopySource">>}, {<<"x-amz-copy-source-if-match">>, <<"CopySourceIfMatch">>}, {<<"x-amz-copy-source-if-modified-since">>, <<"CopySourceIfModifiedSince">>}, {<<"x-amz-copy-source-if-none-match">>, <<"CopySourceIfNoneMatch">>}, {<<"x-amz-copy-source-if-unmodified-since">>, <<"CopySourceIfUnmodifiedSince">>}, {<<"x-amz-copy-source-range">>, <<"CopySourceRange">>}, {<<"x-amz-copy-source-server-side-encryption-customer-algorithm">>, <<"CopySourceSSECustomerAlgorithm">>}, {<<"x-amz-copy-source-server-side-encryption-customer-key">>, <<"CopySourceSSECustomerKey">>}, {<<"x-amz-copy-source-server-side-encryption-customer-key-MD5">>, <<"CopySourceSSECustomerKeyMD5">>}, {<<"x-amz-expected-bucket-owner">>, <<"ExpectedBucketOwner">>}, {<<"x-amz-source-expected-bucket-owner">>, <<"ExpectedSourceBucketOwner">>}, {<<"x-amz-request-payer">>, <<"RequestPayer">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key">>, <<"SSECustomerKey">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeaders = [], Input2 = Input1, QueryMapping = [ {<<"partNumber">>, <<"PartNumber">>}, {<<"uploadId">>, <<"UploadId">>} ], {Query_, Input} = aws_request:build_headers(QueryMapping, Input2), case request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket) of {ok, Body0, {_, ResponseHeaders, _} = Response} -> ResponseHeadersParams = [ {<<"x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-copy-source-version-id">>, <<"CopySourceVersionId">>}, {<<"x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-server-side-encryption">>, <<"ServerSideEncryption">>} ], FoldFun = fun({Name_, Key_}, Acc_) -> case lists:keyfind(Name_, 1, ResponseHeaders) of false -> Acc_; {_, Value_} -> Acc_#{Key_ => Value_} end end, Body = lists:foldl(FoldFun, Body0, ResponseHeadersParams), {ok, Body, Response}; Result -> Result end. %% @doc This operation is not supported by directory buckets. %% %% Passes transformed objects to a `GetObject' operation when using %% Object Lambda access points. For information about Object Lambda access %% points, see Transforming objects with Object Lambda access points: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html %% in the Amazon S3 User Guide. %% %% This operation supports metadata that can be returned by GetObject: %% https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html, in %% addition to `RequestRoute', `RequestToken', `StatusCode', %% `ErrorCode', and `ErrorMessage'. The `GetObject' response %% metadata is supported so that the `WriteGetObjectResponse' caller, %% typically an Lambda function, can provide the same metadata when it %% internally invokes `GetObject'. When `WriteGetObjectResponse' is %% called by a customer-owned Lambda function, the metadata returned to the %% end user `GetObject' call might differ from what Amazon S3 would %% normally return. %% %% You can include any number of metadata headers. When including a metadata %% header, it should be prefaced with `x-amz-meta'. For example, %% `x-amz-meta-my-custom-header: MyCustomValue'. The primary use case for %% this is to forward `GetObject' metadata. %% %% Amazon Web Services provides some prebuilt Lambda functions that you can %% use with S3 Object Lambda to detect and redact personally identifiable %% information (PII) and decompress S3 objects. These Lambda functions are %% available in the Amazon Web Services Serverless Application Repository, %% and can be selected through the Amazon Web Services Management Console %% when you create your Object Lambda access point. %% %% Example 1: PII Access Control - This Lambda function uses Amazon %% Comprehend, a natural language processing (NLP) service using machine %% learning to find insights and relationships in text. It automatically %% detects personally identifiable information (PII) such as names, %% addresses, dates, credit card numbers, and social security numbers from %% documents in your Amazon S3 bucket. %% %% Example 2: PII Redaction - This Lambda function uses Amazon Comprehend, a %% natural language processing (NLP) service using machine learning to find %% insights and relationships in text. It automatically redacts personally %% identifiable information (PII) such as names, addresses, dates, credit %% card numbers, and social security numbers from documents in your Amazon S3 %% bucket. %% %% Example 3: Decompression - The Lambda function %% S3ObjectLambdaDecompression, is equipped to decompress objects stored in %% S3 in one of six compressed file formats including bzip2, gzip, snappy, %% zlib, zstandard and ZIP. %% %% For information on how to view and use these functions, see Using Amazon %% Web Services built Lambda functions: %% https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-examples.html %% in the Amazon S3 User Guide. write_get_object_response(Client, Input) -> write_get_object_response(Client, Input, []). write_get_object_response(Client, Input0, Options0) -> Method = post, Path = ["/WriteGetObjectResponse"], Bucket = undefined, SuccessStatusCode = undefined, Options = [{send_body_as_binary, true}, {receive_body_as_binary, false}, {append_sha256_content_hash, false} | Options0], HeadersMapping = [ {<<"x-amz-fwd-error-message">>, <<"ErrorMessage">>}, {<<"x-amz-fwd-header-x-amz-checksum-crc32c">>, <<"ChecksumCRC32C">>}, {<<"x-amz-fwd-header-x-amz-delete-marker">>, <<"DeleteMarker">>}, {<<"x-amz-fwd-header-x-amz-object-lock-retain-until-date">>, <<"ObjectLockRetainUntilDate">>}, {<<"x-amz-request-token">>, <<"RequestToken">>}, {<<"x-amz-fwd-header-x-amz-restore">>, <<"Restore">>}, {<<"x-amz-request-route">>, <<"RequestRoute">>}, {<<"x-amz-fwd-status">>, <<"StatusCode">>}, {<<"x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled">>, <<"BucketKeyEnabled">>}, {<<"x-amz-fwd-header-Content-Type">>, <<"ContentType">>}, {<<"x-amz-fwd-header-x-amz-server-side-encryption-customer-key-MD5">>, <<"SSECustomerKeyMD5">>}, {<<"x-amz-fwd-header-x-amz-object-lock-legal-hold">>, <<"ObjectLockLegalHoldStatus">>}, {<<"x-amz-fwd-header-x-amz-version-id">>, <<"VersionId">>}, {<<"x-amz-fwd-header-accept-ranges">>, <<"AcceptRanges">>}, {<<"x-amz-fwd-header-Content-Language">>, <<"ContentLanguage">>}, {<<"x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm">>, <<"SSECustomerAlgorithm">>}, {<<"x-amz-fwd-header-Content-Encoding">>, <<"ContentEncoding">>}, {<<"x-amz-fwd-header-x-amz-checksum-sha256">>, <<"ChecksumSHA256">>}, {<<"x-amz-fwd-header-ETag">>, <<"ETag">>}, {<<"x-amz-fwd-header-Last-Modified">>, <<"LastModified">>}, {<<"x-amz-fwd-error-code">>, <<"ErrorCode">>}, {<<"x-amz-fwd-header-Content-Range">>, <<"ContentRange">>}, {<<"x-amz-fwd-header-Expires">>, <<"Expires">>}, {<<"x-amz-fwd-header-x-amz-tagging-count">>, <<"TagCount">>}, {<<"x-amz-fwd-header-x-amz-expiration">>, <<"Expiration">>}, {<<"x-amz-fwd-header-x-amz-replication-status">>, <<"ReplicationStatus">>}, {<<"x-amz-fwd-header-Cache-Control">>, <<"CacheControl">>}, {<<"x-amz-fwd-header-x-amz-storage-class">>, <<"StorageClass">>}, {<<"x-amz-fwd-header-x-amz-missing-meta">>, <<"MissingMeta">>}, {<<"Content-Length">>, <<"ContentLength">>}, {<<"x-amz-fwd-header-x-amz-object-lock-mode">>, <<"ObjectLockMode">>}, {<<"x-amz-fwd-header-Content-Disposition">>, <<"ContentDisposition">>}, {<<"x-amz-fwd-header-x-amz-request-charged">>, <<"RequestCharged">>}, {<<"x-amz-fwd-header-x-amz-server-side-encryption">>, <<"ServerSideEncryption">>}, {<<"x-amz-fwd-header-x-amz-mp-parts-count">>, <<"PartsCount">>}, {<<"x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id">>, <<"SSEKMSKeyId">>}, {<<"x-amz-fwd-header-x-amz-checksum-crc32">>, <<"ChecksumCRC32">>}, {<<"x-amz-fwd-header-x-amz-checksum-sha1">>, <<"ChecksumSHA1">>} ], {Headers, Input1} = aws_request:build_headers(HeadersMapping, Input0), CustomHeadersMapping = [ {<<"x-amz-meta-">>, <<"Metadata">>} ], {CustomHeaders, Input2} = aws_request:build_custom_headers(CustomHeadersMapping, Input1), Query_ = [], Input = Input2, request(Client, Method, Path, Query_, CustomHeaders ++ Headers, Input, Options, SuccessStatusCode, Bucket). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), atom(), iolist(), list(), list(), map() | undefined, list(), pos_integer() | undefined, binary() | undefined) -> {ok, {integer(), list()}} | {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map(), Error :: map(). request(Client, Method, Path, Query, Headers0, Input, Options, SuccessStatusCode, Bucket0) -> Bucket = case Bucket0 of undefined -> undefined; _ -> iolist_to_binary(Bucket0) end, RequestFun = fun() -> do_request(Client, Method, Path, Query, Headers0, Input, Options, SuccessStatusCode, Bucket) end, aws_request:request(RequestFun, Options). do_request(Client, Method, Path, Query, Headers0, Input, Options, SuccessStatusCode, Bucket) -> Client1 = Client#{service => <<"s3">>}, Host = build_host(<<"s3">>, Client1, Bucket), URL0 = build_url(Host, Path, Client1, Bucket), URL = aws_request:add_query(URL0, Query), AdditionalHeaders1 = [ {<<"Host">>, Host} , {<<"Content-Type">>, <<"text/xml">>} ], Payload = case proplists:get_value(send_body_as_binary, Options) of true -> maps:get(<<"Body">>, Input, <<"">>); false -> encode_payload(Input) end, AdditionalHeaders = case proplists:get_value(append_sha256_content_hash, Options, false) of true -> add_checksum_hash_header(AdditionalHeaders1, Payload); false -> AdditionalHeaders1 end, Headers1 = aws_request:add_headers(AdditionalHeaders, Headers0), MethodBin = aws_request:method_to_binary(Method), SignedHeaders = aws_request:sign_request(Client1, MethodBin, URL, Headers1, Payload), Response = hackney:request(Method, URL, SignedHeaders, Payload, Options), DecodeBody = not proplists:get_value(receive_body_as_binary, Options), handle_response(Response, SuccessStatusCode, DecodeBody). add_checksum_hash_header(Headers, Body) -> [ {<<"X-Amz-CheckSum-SHA256">>, base64:encode(crypto:hash(sha256, Body))} | Headers ]. handle_response({ok, StatusCode, ResponseHeaders}, SuccessStatusCode, _DecodeBody) when StatusCode =:= 200; StatusCode =:= 202; StatusCode =:= 204; StatusCode =:= 206; StatusCode =:= SuccessStatusCode -> {ok, {StatusCode, ResponseHeaders}}; handle_response({ok, StatusCode, ResponseHeaders}, _, _DecodeBody) -> {error, {StatusCode, ResponseHeaders}}; handle_response({ok, StatusCode, ResponseHeaders, Client}, SuccessStatusCode, DecodeBody) when StatusCode =:= 200; StatusCode =:= 202; StatusCode =:= 204; StatusCode =:= 206; StatusCode =:= SuccessStatusCode -> case hackney:body(Client) of {ok, <<>>} when StatusCode =:= 200; StatusCode =:= SuccessStatusCode -> {ok, #{}, {StatusCode, ResponseHeaders, Client}}; {ok, Body} -> Result = case DecodeBody of true -> try aws_util:decode_xml(Body) catch Error:Reason:Stack -> erlang:raise(error, {body_decode_failed, Error, Reason, StatusCode, Body}, Stack) end; false -> #{<<"Body">> => Body} end, {ok, Result, {StatusCode, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, _ResponseHeaders, _Client}, _, _DecodeBody) when StatusCode =:= 503 -> %% Retriable error if retries are enabled {error, service_unavailable}; handle_response({ok, StatusCode, ResponseHeaders, Client}, _, _DecodeBody) -> {ok, Body} = hackney:body(Client), try DecodedError = aws_util:decode_xml(Body), {error, DecodedError, {StatusCode, ResponseHeaders, Client}} catch Error:Reason:Stack -> erlang:raise(error, {body_decode_failed, Error, Reason, StatusCode, Body}, Stack) end; handle_response({error, Reason}, _, _DecodeBody) -> {error, Reason}. build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}, undefined) -> Endpoint; build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}, _Bucket) -> <>; build_host(_EndpointPrefix, #{region := <<"local">>}, undefined) -> "localhost"; build_host(_EndpointPrefix, #{region := <<"local">>}, _Bucket) -> <<"localhost">>; build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}, undefined) -> aws_util:binary_join([EndpointPrefix, Region, Endpoint], <<".">>); build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}, Bucket) -> aws_util:binary_join([Bucket, EndpointPrefix, Region, Endpoint], <<".">>). build_url(Host0, Path0, Client, Bucket) -> Proto = aws_client:proto(Client), %% Mocks are notoriously bad with host-style requests, just skip it and use path-style for anything local %% At some points once the mocks catch up, we should remove this ugly hack... Host1 = erlang:iolist_to_binary(Host0), IsLocalHost = aws_client:region(Client) =:= <<"local">>, Path = case Bucket of _ when not IsLocalHost andalso Bucket =/= undefined -> erlang:iolist_to_binary(binary:replace(iolist_to_binary(Path0), [Bucket, <>], <<"">>, [global])); _ -> erlang:iolist_to_binary(Path0) end, Host = case Bucket of _ when not IsLocalHost andalso Bucket =/= undefined -> erlang:iolist_to_binary(string:replace(Host1, <>, <<"">>, all)); _ -> Host1 end, Port = aws_client:port(Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, Path], <<"">>). -spec encode_payload(undefined | map()) -> binary(). encode_payload(undefined) -> <<>>; encode_payload(Input) -> aws_util:encode_xml(Input).