#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