Copying objects
Object Storage supports server-side copy.
If bucket encryption is disabled, objects will be copied to server-side buckets. The host running the copy command and Object Storage only exchange object keys. Since the transfer is internal to the object storage, no fee is charged for copying traffic in this case. However, you will be billed for copy requests.
If bucket objects are encrypted, they will first be copied to the host running the command and then uploaded to the target bucket.
Large objects uploaded using multipart uploads are stored in parts within the bucket. To copy these objects, you need to use the copyPart call for each part. Therefore, multipart objects cost more to copy than regular ones.
You can copy either the entire bucket contents or an individual bucket object.
To work with objects in an encrypted bucket, a user or service account must have the following roles for the encryption key in addition to the storage.configurer
role:
kms.keys.encrypter
: To read the key, encrypt, and upload objects.kms.keys.decrypter
: To read the key, decrypt, and download objects.kms.keys.encrypterDecrypter
: Includes thekms.keys.encrypter
andkms.keys.decrypter
permissions.
For more information, see Key Management Service service roles.
Copying a single object
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder specified in the CLI profile is used by default. You can specify a different folder through the --folder-name
or --folder-id
parameter.
-
See the description of the CLI command for uploading an object to a bucket:
yc storage s3api copy-object --help
-
Get a list of buckets in the default folder:
yc storage bucket list
Result:
+------------------+----------------------+-------------+-----------------------+---------------------+ | NAME | FOLDER ID | MAX SIZE | DEFAULT STORAGE CLASS | CREATED AT | +------------------+----------------------+-------------+-----------------------+---------------------+ | first-bucket | b1gmit33ngp6******** | 53687091200 | STANDARD | 2022-12-16 13:58:18 | +------------------+----------------------+-------------+-----------------------+---------------------+
-
Run this command:
yc storage s3api copy-object \ --copy-source <source_bucket>/<object_key> \ --bucket <target_bucket> \ --key <object_key>
Where:
--copy-source
: Name of the source bucket and object key you need to copy.--bucket
: Name of the bucket to copy the object to.--key
: Key to use for storing the object in the bucket.
Result:
copy_object_result: etag: '"d41d8cd98f00b204e9800998********"' last_modified_at: "2024-10-08T14:21:41.628Z" request_id: 61523025******** copy_source_version_id: "null"
-
If you do not have the AWS CLI yet, install and configure it.
-
Run this command:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp s3://<source_bucket>/<object_key> s3://<target_bucket>/<object_key>
Where:
--endpoint-url
: Object Storage endpoint.s3 cp
: Command to copy objects.
Result:
copy: s3://<source_bucket>/<object_key> to s3://<target_bucket>/<object_key>
For more information about the
aws s3 cp
command, see this article in the AWS CLI command reference.
Copying all bucket objects to a different bucket
-
If you do not have the AWS CLI yet, install and configure it.
-
Run this command:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp --recursive s3:<source_bucket>/ s3:<target_bucket>/
Where:
--endpoint-url
: Object Storage endpoint.s3 cp
: Command to copy objects.--recursive
: Parameter for copying all objects from the source bucket.
For more information about the
aws s3 cp
command, see this article in the AWS CLI command reference.
All objects from the source bucket will now appear in the target bucket.
Note
You can copy objects between buckets, both within the same cloud and across different clouds. To do this, make sure your service account has write permissions for both buckets.