Потоковое сжатие в корзину S3 с пользовательской структурой каталогов - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение, которое требует создания сжатого файла из разных объектов, сохраненных в S3.Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы сжимать объекты на лету, не загружая файлы в контейнер, и выполнять сжатие.Причина в том, что размер файлов может быть довольно большим, и я могу легко исчерпать дисковое пространство и, конечно, будет дополнительное время загрузки файлов на диск, сжатия их и загрузки сжатого файла в * 1002.* очередной раз.

Стоит отметить, что я хотел бы найти файлы в выходном сжатом файле в разных каталогах, поэтому, когда пользователь распаковывает файл, он видит, что он хранится в разных папках.

Так как S3 не имеет концепции физической структуры папок, я не уверен, возможно ли это и есть ли лучший способ, чем загрузка / выгрузка файлов.

ПРИМЕЧАНИЕ

Моя проблема не в том, как использовать AWS Lambda для экспорта набора больших файлов.Речь идет о том, как я могу экспортировать файлы из S3 без загрузки объектов на локальный диск, а также создать zip-файл и загрузить в S3.Я хотел бы просто сжать файлы на S3 на лету и, что наиболее важно, иметь возможность настроить структуру каталогов.

Например,

inputs:

big-file1
big-file2
big-file3
...

output:

big-zip.zip

with the directory structure of:

images/big-file1
images/big-file2
videos/big-file3
...

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

У меня почти такой же вариант использования, как и у вас.Я исследовал его в течение приблизительно 2 месяцев и пробовал несколькими способами, но в конце концов мне пришлось использовать ECS (EC2) для моего случая использования, потому что zip-файл может быть огромным, как 100 ГБ ....

  1. В настоящее время AWS не поддерживает собственный способ сжатия.Я поговорил с ними, и они рассматривают это как особенность, но пока не указана временная шкала.

  2. Если размер ваших файлов составляет около 3 ГБ, вы можете подумать о Lambdaчтобы удовлетворить ваши требования.

  3. Если ваши файлы занимают более 4 ГБ, я считаю, что это безопасно делать с ECS или EC2 и прикреплять больший объем, если для этого требуется больше места / памятисжатие.

Спасибо,

0 голосов
/ 26 сентября 2019

Да, есть как минимум два способа: либо использовать AWS-Lambda, либо AWS-EC2

EC2

, поскольку aws-cli имеет поддержку *Команда 1009 * из cp позволяет передать файл S3 в любой архиватор с использованием unix-pipe, например:

aws s3 cp s3://yours-bucket/huge_file - | gzip | aws s3 cp - s3://yours-bucket/compressed_file

AWS-Lambda

, посколькуобслуживание и использование экземпляра EC2 только для сжатия может быть слишком дорогим, вы можете использовать Lambda для одноразовых сжатий.

Но имейте в виду, что срок службы Lambda составляет 15 минут.Итак, если ваши файлы действительно огромные, попробуйте следующую последовательность:

  • Чтобы убедиться, что файл будет сжат, попробуйте частичное сжатие файлов, используя Lambda
  • Сжатые файлы могут быть объединены на S3в один файл, используя Загрузить деталь - Копировать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...