Как перенести содержимое бакета в другой бакет в пределах каталога
Описание задачи
Необходимо перенести содержимое бакета в другой бакет, расположенный в том же самом каталоге.
Решение проблемы
Перенести содержимое бакета напрямую в другой каталог или облако не получится, но можно скопировать его содержимое при помощи утилиты AWS CLI.
В Object Storage поддерживается функциональность Server Side Copy (копирование на стороне сервера).
Для переноса воспользуйтесь командой:
aws --endpoint-url=https://storage.yandexcloud.net s3 cp --recursive s3://bucket1/ s3://bucket2/
Перед выполнением команды из вышеуказанного примера выполните следующие замены:
bucket1
- бакет-источник, из которого будет производиться перенос или копирование;bucket2
– бакет-приемник, внутрь которого будет производиться перенос или копирование.
Во время копирования с помощью AWS CLI все объекты будут перемещаться непосредственно между бакетами. Между хостом, на котором запущена команда aws s3 cp
, и серверами Object Storage будут передаваться только метаданные, то есть ключи передаваемых объектов. Передаваемый и принимаемый в Object Storage трафик при этом не тарифицируется, поскольку является внутренним с точки зрения объектного хранилища.
Аналогичным способом можно скопировать содержимое бакета не только в другой каталог в рамках того же облака, но и в каталог в другом облаке. При этом необходимо, чтобы у используемой учетной записи IAM присутствовал доступ на запись в оба бакета.
Примечание
Если в бакете включено шифрование, все загруженные в него файлы будут зашифрованы KMS-ключом, указанным в настройках бакета.
Функциональность Server Side Copy в этом случае не задействуется — при копировании объектов между бакетами они сначала будут загружаться на промежуточный хост с клиентом S3, затем выгружаться в целевой бакет.