Как упоминалось ранее, нет встроенного способа сделать это. Но с другой стороны, вам не нужно скачивать и загружать файлы обратно. Вы можете создать решение без сервера в том же регионе / местоположении AWS.
Вы можете реализовать это по-разному:
В этом случае вы будете запускать лямбда-функцию через API-шлюз. Лямбда-функция создаст архив из файлов вашего сегмента и загрузит результат обратно в S3. Лямбда-функция вернет URL этого архива ***.
Недостатки этого способа : Lambda не может работать более 5 минут, и если у вас слишком много файлов, у них не будет достаточно времени для их обработки. Помните, что максимальный размер файла S3 составляет 5 терабайт. Самый большой объект, который может быть загружен в одном PUT, составляет 5 гигабайт. Для объектов размером более 100 мегабайт, вы должны рассмотреть возможность использования Multipart Upload.
Пример: Полное руководство по разработке REST API с помощью AWS API Gateway и AWS Lambda
5 минут должно быть достаточно для создания архива, но если вы собираетесь выполнить некоторую предварительную обработку, я рекомендую вам использовать Step Function. SF имеет ограничение по максимальному количеству зарегистрированных действий / состояний и размеру запроса (вы не можете передать свой архив в запросе), но его легко избежать (если вы принимаете это во внимание при проектировании). Проверьте больше там .
Лично я использую оба способа для разных случаев.
*** Это плохая практика - указывайте пользователю путь к вашему реальному файлу на S3. Лучше использовать CloudFront CDN . CloudFront позволяет контролировать время жизни URL-адреса и предоставлять различные способы защиты и ограничения.