получите уведомление, если объекты находятся в определенных папках корзины s3 более 7 часов

#amazon-s3 #aws-lambda #notifications #amazon-cloudwatch

Вопрос:

У меня есть лямбда для обработки файлов в папке корзины s3. Я хотел бы настроить оповещение/уведомление, если объекты находятся в папках более 7 часов и не обрабатываются лямбда

Комментарии:

1. Что делает лямбда? Если он обработал файл, запишет ли он новую версию файла в S3 (то же самое хранилище) или файл будет удален после того, как его обработала лямбда? Вам нужно сохранить файл после его обработки?

2. @st.huber lambda обработает файл и переместит его в архив. У нас возникла проблема, когда клиент загрузил данные, но Lambda не обработала файлы, и объекты остались в папке без обработки. Поэтому мне нужно создать уведомление, чтобы узнать, обрабатывается ли файл лямбда-кодом после загрузки или нет, пороговое время должно составлять 7 часов.

3. Как клиент загружает данные в S3?

Ответ №1:

Вы можете использовать теги объектов в S3, обработать что-то вроде имени тега : true или false, измененное вашим лямбда-процессором.

Затем в другой запланированной лямбде вы можете проверить объект создания, если > 7 часов и обработано : ложь (это означает, что лямбда не обработана), если найдено, что вы создаете уведомление в SNS

Комментарии:

1. Объекты не имеют тегов. Клиент загрузит данные, и у нас есть лямбда-код для их обработки и архивирования. Я хочу создать уведомление, если лямбда-код не обрабатывал файл в течение 7 часов после поступления данных в папку в s3

Ответ №2:

Установите срок действия объекта на 7 часов для корзины S3. Затем пусть лямбда-код будет вызван событием удаления. Лямбда-код может быть тем, который уведомляет вас и сохраняет файл в другом контейнере или пересылает его на ваш исходный лямбда-код. Лямбда-триггер может быть тем, который должен был сработать при загрузке объекта.

Кроме того, вы можете добавлять теги к загруженным файлам. Метка может быть ttl: <date-to-delete> . У вас есть запланированное событие CloudWatch, которое запускает лямбду, например, каждый час, и проверяет все объекты в корзине S3, является ли значение ttl -тега старше текущего времени.

Лично я бы выбрал первый подход, поскольку он в большей степени ориентирован на события и менее запланирован для обработки.

С другой стороны, довольно странно, что лямбда-код не срабатывает для некоторых объектов S3. Я не знаю, как вы развертываете свою Лямбду и настраиваете триггер на S3. Если вы используете бессерверный или CDK, я не вижу, как ваш lambda не запускается для каждого загруженного файла с конфигурацией, подобной следующей:

 // serverless example
functions:
  users:
    handler: users.handler
    events:
      - s3:
          bucket: photos
          event: s3:ObjectCreated:*
          rules:
            - prefix: uploads/
            - suffix: .jpg
 

В этом примере лямбда пользователей запускается для каждого файла jpg, созданного в фотографиях/загрузках.

Комментарии:

1. Я считаю, что истечение срока действия объекта приведет к удалению объектов по истечении этого времени. Я проверил, что lambda обрабатывает файл и перемещает его в другую папку под названием «Архив», поэтому идея может быть такой: мы сравниваем обе папки и смотрим, будут ли файлы перемещены в архив через 7 часов. как мы можем это сделать?

2. Истечение срока действия объекта будет выполнять то, для чего вы его настроили. Это может быть то, что вы удалите файл, измените тип хранения файлов … Я почти уверен, что вы все еще можете получить доступ к объекту на S3, когда лямбда запускается через s3:ObjectRemoved