Служба уведомлений по размеру AWS S3 (префикс) - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть конкретный c сценарий использования, когда у нас есть огромный объем данных, которые непрерывно передаются в AWS корзину.

нам нужен сервис уведомлений для s3 корзины в указанной папке c, где, если папка достигает определенного размера c (например, 100 ТБ), служба очистки должна запускаться через (SNS, Aws lambda)

Я проверил в AWS документация. Я не нашел прямой поддержки от Aws по этому вопросу. https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

Мы планируем иметь скрипт, который будет периодически запускаться и проверять размер объекта s3 и пинки AWS лямбда.

есть ли какой-нибудь элегантный способ разобраться с делом, как это. Любое предложение или мнение действительно приветствуется.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Прямой метод получения размера папки в Amazon S3 отсутствует (поскольку папки на самом деле не существуют).

Вот несколько идей ...

Периоды c Лямбда-функция для вычисления общего числа

Создание Amazon CloudWatch Event для запуска AWS Лямбда-функции с указанными c интервалами. Функция Lambda будет перечислять все объекты с заданной Prefix (фактически папка) и суммировать размеры. Если оно превышает 100 ТБ, функция Lambda может запустить процесс очистки.

Однако, если в этой папке тысячи файлов, это будет несколько медленным. Каждый вызов API может получить только 1000 объектов. Таким образом, для подсчета итога может потребоваться много вызовов, и это будет выполняться каждый интервал проверки.

Сохранение промежуточного итога

Настройка События Amazon S3 для запуска AWS лямбда-функции всякий раз, когда новый объект создается с этим Prefix. Лямбда-функция может извлекать приращение промежуточной суммы в базе данных. Если общий объем превышает 100 ТБ, функция Lambda может запустить процесс очистки.

Какую базу данных использовать? Amazon DynamoDB будет самым быстрым и поддерживает функцию «увеличения», но вы можете быть хитрым и просто использовать AWS System Manager Parameter Store. Это может вызвать проблемы, если новые объекты создаются быстро, потому что нет блокировки. Поэтому, если файлы приходят каждые несколько секунд или быстрее, обязательно используйте DynamoDB.

Замедленное движение

Вы не указали, как часто этот предел в 100 ТБ может быть срабатывает. Если это произойдет только через несколько дней, вы можете использовать Amazon S3 Inventory , который предоставляет ежедневный CSV, содержащий список объектов в корзине. Это решение, конечно, не будет применимо, если предел в 100 ТБ достигнут менее чем за день.

0 голосов
/ 29 апреля 2020

Присоедините триггерное событие s3 к лямбда-функции, которая будет запускаться всякий раз, когда какой-либо файл добавляется в корзину S3.

Затем в лямбда-функции проверьте размер файла. Это исключит необходимость периодически запускать скрипт для проверки размера.

Ниже приведен пример кода для добавления триггера S3 к лямбда-функции.

s3_trigger:
 handler: lambda/lambda.s3handler
 timeout: 900
 events:
   - s3:
       bucket: ${self:custom.sagemakerBucket}
       event: s3:ObjectCreated:*
       existing: true
       rules:
         - prefix: csv/
         - suffix: .csv
...