Копирование объектов
В 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.
Копирование одного объекта
-
Если у вас еще нет 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 .
Все объекты будут скопированы из бакета-источника в бакет-приемник.
Примечание
Вы можете скопировать объекты между бакетами, как в рамках одного облака, так и между разными облаками. Для этого убедитесь, что у используемого сервисного аккаунта есть права на запись в оба бакета.
Копирование объектов в бакет другой организации
Чтобы скопировать объекты в бакет другой организации, создайте два сервисных аккаунта: один с ролью storage.viewer
на бакет-источник, а второй — с ролью storage.editor
на бакет-приемник.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его для каждой из организаций.
-
Убедитесь, что профили для сервисных аккаунтов источника и приемника есть в файле
~/.aws/credentials
-
Задайте список управления доступом бакета-приемника с полным доступом для сервисного аккаунта исходного бакета:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3api put-bucket-acl --profile <имя_профиля_приемника> \ --bucket <имя_бакета_приемника> \ --grant-full-control id=<идентификатор_сервисного_аккаунта_источника>
Где:
--endpoint-url
— эндпоинт Object Storage.--profile
— имя профиля в конфигурационном файле AWS CLI для организации, в которой находится бакет-приемник.--bucket
— имя бакета-приемника.--grant-full-control
— параметр для выдачи доступа сервисному аккаунту бакета-источника к бакету-приемнику. Указывается идентификатор сервисного аккаунта организации, откуда копируются объекты.
-
Скопируйте объекты:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp --profile <имя_профиля_источника> \ s3://<бакет_источник>/<ключ_объекта> \ s3://<бакет_приемник>/<ключ_объекта>
Где:
--endpoint-url
— эндпоинт Object Storage.--profile
— имя профиля в конфигурационном файле AWS CLI для организации, в которой находится бакет-источник.s3 cp
— команда для копирования объектов.
Чтобы скопировать все объекты бакета-источника, используйте параметр
--recursive
.Результат:
copy: s3://<бакет_источник>/<ключ_объекта> to s3://<бакет_приемник>/<ключ_объекта>
Подробнее о команде
aws s3 cp
см. в документации AWS CLI Command Reference .