Как перечислить и отсортировать объекты S3 через CLI

Быстрые ссылки
- Listing and Sorting Items with the S3 CLI
Перечисление и сортировка объектов через S3 CLI
S3 предоставляет встроенные опции сортировки в веб‑консоли, поэтому для локального просмотра папки достаточно сортировки в интерфейсе. Но если нужно просмотреть все объекты в бакете (независимо от ключа), удобнее работать через AWS CLI. Если AWS CLI не установлен, настройте его согласно официальной документации перед выполнением команд.
Команда для получения списка объектов (пример):
aws s3api list-object-versions --bucket example-bucketДля больших бакетов этот запрос может выполняться длительно: AWS вернёт полный список объектов и их метаданные. В ответ вы получите JSON-объект для каждого элемента, например:
{
"ETag": "04e28fbee1ef2721123bb4e9a78183a895",
"Size": 320,
"StorageClass": "STANDARD",
"Key": "folder/file.json",
"VersionId": "fNdwjJRaEjBYUSBgZe51oj_s4ONo5GsL",
"IsLatest": false,
"LastModified": "2020-11-05T18:59:18+00:00",
"Owner": {
"DisplayName": "username",
"ID": "501092a155f88f4d174d7as3d2a347f33b9495f0261434682ab9a"
}
}Чтобы распарсить и отсортировать такой вывод, удобно использовать jq — утилиту для работы с JSON в командной строке. Установите её (пример для Debian/Ubuntu):
sudo apt-get install jqНиже пример команды, которая покажет 100 самых больших объектов в бакете (подставьте имя своего бакета):
aws s3api list-object-versions --bucket oxide.rust | jq -r '.Versions[] | "\(.Key)\t\(.Size)"' | sort -k2 -r -n | head -100Если нужно больше или меньше строк, измените параметр у команды head.
Важно: для выполнения запросов потребуются права IAM на s3:ListBucket и, если включена версионность, s3:GetObjectVersion. Для очень больших бакетов CLI может занять много времени и памяти на клиенте.
Когда это не сработает
- Бакеты с сотнями миллионов объектов: клиентская обработка JSON и сортировка могут быть неэффективны.
- Если versioning отключён, команда list-object-versions не выдаст истории версий — используйте list-objects-v2.
- Ограничения прав доступа (IAM) скрывают объекты от вывода.
Альтернативные подходы
- S3 Inventory: периодические отчёты (CSV/Parquet) с метаданными объектов — подходит для масштабных анализов.
- AWS Console: быстрый интерактивный просмотр и сортировка по папкам для небольших наборов.
- Storage Lens: агрегированные отчёты и метрики по использованию хранилища.
- Скрипты на SDK (Python, Go, JavaScript) с пагинацией и параллельной обработкой — контролируют потребление памяти и дают гибкость.
Мини-методология
- Оцените масштаб бакета и включён ли versioning.
- Выберите правильную команду: list-object-versions или list-objects-v2.
- Получите вывод через AWS CLI и сохраните в файл при необходимости.
- Разберите JSON через jq или SDK, извлеките пары (Key, Size).
- Отсортируйте по Size, примените фильтры по префиксу или StorageClass.
- Проверьте найденные крупные объекты и примите решения об оптимизации (архивирование, удаление, переход в Glacier).
Контрольный список по ролям
- Администратор:
- Проверил IAM-политики и логи доступа.
- Предоставил/проверил права на выполнение list и get.
- DevOps / инженер:
- Установил jq и написал скрипт для регулярного анализа.
- Настроил лимит вывода (head) и логирование.
- SRE:
- Оценил влияние операций на сеть и клиент.
- Рассмотрел S3 Inventory для регулярных автоматизированных отчётов.
1-строчное глоссарий
- jq — утилита для фильтрации и трансформации JSON в командной строке.
- Versioning — режим версионности объектов в бакете S3.
- ETag — контрольная сумма/идентификатор объекта, часто MD5 при загрузке целиком.
Резюме
AWS CLI в связке с jq даёт простой и воспроизводимый способ найти крупнейшие объекты в бакете S3. Для разовых или мелких задач достаточно консоли. Для регулярного анализа больших объёмов предпочтительнее S3 Inventory или скрипты на SDK с пагинацией.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone