Переместите все файлы в корзине s3 из учетной записи s3 в другую, используя boto3 - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь переместить содержимое корзины из account-a в корзину в account-b , у меня уже есть учетные данные для них обоих.

Вот код, который я сейчас использую:

import boto3

SRC_AWS_KEY = 'src-key'
SRC_AWS_SECRET = 'src-secret'

DST_AWS_KEY = 'dst-key'
DST_AWS_SECRET = 'dst-secret'
srcSession = boto3.session.Session(
        aws_access_key_id=SRC_AWS_KEY,
        aws_secret_access_key=SRC_AWS_SECRET
)
dstSession = boto3.session.Session(
        aws_access_key_id=DST_AWS_KEY,
        aws_secret_access_key=DST_AWS_SECRET
)
copySource = {
    'Bucket': 'src-bucket',
    'Key': 'test-bulk-src'
}
srcS3 = srcSession.resource('s3')
dstS3 = dstSession.resource('s3')
dstS3.meta.client.copy(CopySource=copySource, Bucket='dst-bucket', Key='test-bulk-dst', SourceClient=srcS3.meta.client)
print('success')

Проблема в том, что когда я указываю имя файла в поле Key, за которым следует /file.csv, оно работает очень хорошо, но когда Я установил его для копирования всей папки, как показано в коде, он завершается с ошибкой и выдает это исключение:

botocore.exceptions.ClientError: Произошла ошибка (404) при вызове HeadObject операция: не найдена

Что мне нужно сделать, это переместить содержимое за один вызов, а не перебирать содержимое папки sr c, потому что это время / Это может занять много денег, так как у меня могут быть тысячи файлов для перемещения.

1 Ответ

0 голосов
/ 13 марта 2020

В Amazon S3 нет вызова API для копирования папок. (Папки на самом деле не существуют - ключ каждого объекта включает в себя полный путь.)

Вам нужно будет перебрать каждый объект и скопировать его.

CLI AWS (написанный на Python) предоставляет некоторые команды более высокого уровня, которые выполнят эту итерацию за вас:

aws s3 cp --recursive s3://source-bucket/folder/ s3://destination-bucket/folder/

Если корзины находятся в разных учетных записях, я бы порекомендовал:

  • Использовать набор учетных данных для целевой учетной записи (исключает проблемы с владением объектом)
  • Изменение политики корзины в исходной корзине 1016 *, чтобы разрешить доступ учетным данным из целевой учетной записи (избегает необходимости использовать два набора учетных данных)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...