Расчет стоимости хранения файлов для пользователя (AWS/S3)
Имеется сервис, который позволяет пользователю загружать файлы. Для этого я использую AWS S3. Файлики каждого пользователя я кладу в отдельную "папку" (то-есть названия файлов одного пользователя имеют одинаковый префикс):
/user-id-1/file1.txt
/user-id-1/file2.txt
/user-id-2/file1.txt
Вопрос у меня следующий:
Как посчитать стоимость для каждого пользователя отдельно? То-есть мне нужно узнать сколько Gb в месяц лежит в "папке" /user-id-1
Что я пробовал:
- посмотреть это через CloudWatch (не получилось, так как инфу по размеру можно получить только по бакету целиком)
- получить список файлов и просуммировать размер (такой вариант мне не подходит, в случае если файлов много, допустим миллион, это будет очень медленно)
Ответы (1 шт):
Если достаточно расчёта раз в день.
Использовать AWS S3 Inventory. Эта опция ежедневно/еженедельно будет создавать листинг всех файлов (включая их размер) в формате CSV (ORC/Parquet по желанию) и класть его в какой-нибудь другой бакет. Дальше можно просто считатывать CSV и суммировать размер файлов. Теоретически можно создать несколько inventory для каждого префикса, т.е. для /user-id-1 будет создан свой CSV-файл, а для /user-id-2 -- свой.
Можно даже не парсить CSV/ORC/Parquet, а использовать AWS Athena для создания такого отчёта прямо из бакета с листингами.
Если нужно считать занимаемое место в реальном времени. Придётся настроить события S3. При каждом событии создания/удаления файла вызывать Lambda-функцию, которая будет добавлять/отнимать размер файла в базе данных.