Копирование объектов
В Object Storage поддерживается копирование объектов на стороне сервера (Server Side Copy).
Если в бакете отключено шифрование, то объекты будут копироваться в бакеты на стороне сервера. Хост, на котором выполняется команда копирования, и Object Storage обмениваются только ключами объектов. Плата за трафик при копировании в таком случае не взимается, поскольку он является внутренним для объектного хранилища. При этом сами запросы на копирование тарифицируются.
Если объекты в бакете зашифрованы, то сначала они будут скопированы на хост, выполняющий команду, и после загружены в бакет-приемник.
Большие объекты, загруженные с помощью составной загрузки, хранятся в бакете частями. Копирование таких объектов происходит путем вызова copyPart для каждой его части. Таким образом, расходы при копировании составных объектов выше, чем при копировании обычных.
Вы можете скопировать как все содержимое бакета, так и отдельный его объект.
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer
должны быть следующие роли на ключ шифрования:
kms.keys.encrypter
— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter
— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter
— включает разрешения, предоставляемые ролямиkms.keys.encrypter
иkms.keys.decrypter
.
Подробнее см. Сервисные роли Key Management Service.
Копирование одного объекта
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для загрузки объекта в бакет:
yc storage s3api copy-object --help
-
Получите список бакетов в каталоге по умолчанию:
yc storage bucket list
Результат:
+------------------+----------------------+-------------+-----------------------+---------------------+ | NAME | FOLDER ID | MAX SIZE | DEFAULT STORAGE CLASS | CREATED AT | +------------------+----------------------+-------------+-----------------------+---------------------+ | first-bucket | b1gmit33ngp6******** | 53687091200 | STANDARD | 2022-12-16 13:58:18 | +------------------+----------------------+-------------+-----------------------+---------------------+
-
Выполните команду:
yc storage s3api copy-object \ --copy-source <бакет_источник>/<ключ_объекта> \ --bucket <бакет_приемник> \ --key <ключ_объекта>
Где:
--copy-source
— имя бакета-источника и ключ объекта, который нужно скопировать.--bucket
— имя бакета, в который нужно скопировать объект.--key
— ключ, по которому объект будет храниться в бакете.
Результат:
copy_object_result: etag: '"d41d8cd98f00b204e9800998********"' last_modified_at: "2024-10-08T14:21:41.628Z" request_id: 61523025******** copy_source_version_id: "null"
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Выполните команду:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp s3://<бакет_источник>/<ключ_объекта> s3://<бакет_приемник>/<ключ_объекта>
Где:
--endpoint-url
— эндпоинт Object Storage.s3 cp
— команда для копирования объектов.
Результат:
copy: s3://<бакет_источник>/<ключ_объекта> to s3://<бакет_приемник>/<ключ_объекта>
Подробнее о команде
aws s3 cp
см. в документации AWS CLI Command Reference .
Копирование всех объектов бакета в другой бакет
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Выполните команду:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp --recursive s3:<бакет_источник>/ s3:<бакет_приемник>/
Где:
--endpoint-url
— эндпоинт Object Storage.s3 cp
— команда для копирования объектов.--recursive
— параметр для копирования всех объектов бакета-источника.
Подробнее о команде
aws s3 cp
см. в документации AWS CLI Command Reference .
Все объекты будут скопированы из бакета-источника в бакет-приемник.
Примечание
Вы можете скопировать объекты между бакетами, как в рамках одного облака, так и между разными облаками. Для этого убедитесь, что у используемого сервисного аккаунта есть права на запись в оба бакета.