Неясно, хотите ли вы сохранить несжатые объекты в S3 или содержимое корзины все еще меняется.
Один из вариантов, который у вас есть, - использовать Инвентарь S3. Это не мгновенно, но он автоматически сгенерирует список объектов в ведре и запишет его в ведро S3 (такое же ведро или другое).
Вы можете прочитать этот список в небольшом скрипте (в зависимости от того, что вам удобно) и заставить его работать с одним объектом за раз. Используйте интерфейс командной строки S3, чтобы извлечь объект, а затем сжать его с помощью инструментов ОС/скрипта.
Я настоятельно рекомендую встроить что-то, что проверяет, существует ли уже сжатый объект, чтобы вы могли перезапустить процесс в случае сбоя или добавления новых объектов без необходимости повторной обработки всего.
Если вы записываете сжатые объекты обратно в S3, рассмотрите возможность использования экземпляра EC2 или Lambda. С Lambda вам может понадобиться использовать файловый поток для сжатия файла на лету, а не для его извлечения. Вы должны быть в состоянии найти примеры этого, по крайней мере, для Python, если не для других поддерживаемых языков.
--
Одно слово предостережения, сделать грубый расчет того, сколько это будет стоить. Запросы на получение довольно дешевы, но передача данных вне может быть дорого. Кроме того, если вы используете любой класс хранилища, кроме Standard, с ним, вероятно, будут связаны затраты на извлечение.