#python #amazon-web-services #amazon-s3 #aws-cli
Вопрос:
В настоящее время у меня 30 миллионов файлов в одной папке в корзине S3, я хочу переместить 7,5 миллиона файлов из нее в 4 папки в корзине S3
Я попробовал использовать команду AWS CLI, но понятия не имею, как указать количество файлов в ней
aws s3 mv s3://BUCKETNAME/myfolder/ s3://BUCKETNAME/folder1/ --recursive
Как я могу зациклить и переместить только 7,5 миллионов файлов в каждую папку?
import boto3
aws_access_key_id = ""
aws_secret_access_key = ""
bucket_from = ""
bucket_to = ""
s3 = boto3.resource(
's3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
src = s3.Bucket(bucket_from)
def move_files():
for archive in src.objects.all():
s3.meta.client.copy_object(
ACL='public-read',
Bucket=bucket_to,
CopySource={'Bucket': bucket_from, 'Key': archive.key},
Key=archive.key
)
move_files()
Комментарии:
1. Чтобы быть ясным, вы хотите повысить детализацию вывода командной строки, чтобы в ней отображалось общее количество перемещенных файлов?
2. Нет, я хочу автоматически переместить разделенные 30 миллионов файлов в 7,5 файлов в каждую папку с помощью интерфейса командной строки aws или python
3. Вам нужно будет «переместить» каждый файл по отдельности. Или напишите программу (например, на Python), которая «перемещает» файлы, копируя их в новый ключ, а затем удаляя исходные файлы.
4. @JohnRotenstein Да, но я пытаюсь понять, как перемещать только 7,5 файлов на python
Ответ №1:
Я бы рекомендовал:
1. Получить список объектов с помощью инвентаризации Amazon S3
Перечисление миллионов объектов может занять много времени. Вместо этого используйте Amazon S3 Inventory, который может предоставлять ежедневный или еженедельный CSV-файл со списком всех объектов.
Это предоставит вам окончательный список текущих объектов.
2. Разделите на 4 списка
Используйте текстовый редактор, чтобы разделить список файлов на 4 отдельных файла-по одному для каждой из ваших целевых папок.
3. Используйте пакетные операции Amazon S3 для копирования объектов
Копирование миллионов объектов заняло бы много времени, если бы вы не выполняли многопоточный процесс.
Более простым и быстрым способом было бы выполнение крупномасштабных пакетных операций над объектами Amazon S3 с использованием пакетных операций S3. Он может использовать файл инвентаризации S3 в качестве входных данных, а затем параллельно выполнять все операции копирования для вас.
4. Очистка
Я рекомендую вам не удалять исходные файлы, пока вы не убедитесь, что все копирование было сделано правильно. Вы снова можете использовать инвентарь S3 для получения списка для целей сравнения.
Как только вы захотите удалить исходные файлы, вы можете использовать жизненный цикл S3 для удаления исходных объектов. Будьте очень осторожны, чтобы не удалить скопированные объекты одновременно!! Только по этой причине, возможно, было бы лучше скопировать объекты в другое хранилище из исходных файлов.
Комментарии:
1. Используя пакет s3, могу ли я указать количество файлов для перемещения ?
2. Нет, вы должны предоставить список конкретных файлов для копирования . (Обратите внимание, что он может «копировать», но не может «перемещать».)