Лямбда-функция AWS вызывается повторно - PullRequest
0 голосов
/ 24 сентября 2018

Я написал лямбда-функцию, которая вызывается автоматически, когда файл попадает в мою корзину S3.Я выполняю определенные проверки этого файла, изменяю конкретные и помещаю файл в то же место.Из-за этого «пута» моя лямбда вызывается снова, и процесс продолжается до тех пор, пока не истечет время моего лямбда-выполнения.Есть ли способ вызвать эту лямбду только один раз?

  • Я нашел подход, в котором я могу сохранить имя файла в DynamoDB и применить проверку в лямбда-функции, но может ли быть другой подход, когдаИспользование DynamoDB можно избежать?

Ответы [ 5 ]

0 голосов
/ 26 сентября 2018

События запускаются в S3 в зависимости от того, поставлен ли объект / отправлен / скопирован / завершен Multipart Upload - Все эти операции соответствуют ObjectCreate согласно документации AWS.

https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

Лучшее решение - ограничить событие создания объекта S3 определенным местоположением сегмента.Таким образом, любое изменение в этом месте сегмента будет запускать лямбда-функцию.

Вы можете внести изменения в другое местоположение сегмента, которое не настроено для запуска лямбда-функции, когда объект создается в этом месте.

Надеюсь, это поможет!

0 голосов
/ 24 сентября 2018

Вы можете загрузить свои файлы в папку, скажем,

s3: // имя-корзины / без проверки

и сохранить проверенную в другой папке, скажем

s3: //bucket-name/validated.

Обновите уведомление о событии S3, чтобы оно вызывало вашу лямбда-функцию всякий раз, когда в объекте / notvalidated происходит событие ObjectCreate (All)приставка.

0 голосов
/ 24 сентября 2018

AWS допускает различные типы триггеров событий s3.Вы можете попробовать сыграть s3: ObjectCreated: Put против s3: ObjectCreated: Post.

0 голосов
/ 24 сентября 2018

Второй ответ не кажется правильным (поставьте против поста) - на самом деле в S3 нет концепции обновления в терминах POST или PUT.Запрос на обновление объекта будет таким же, как и исходный POST объекта.См. здесь для получения подробной информации о доступных событиях S3.

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

0 голосов
/ 24 сентября 2018

У вас есть пара вариантов:

  1. Вы можете поместить файл в другое место в s3 и удалить исходный
  2. Вы можете добавить поле метаданных к объекту s3, когдаВы обновляете это.Затем проверьте наличие этого поля в s3, чтобы вы знали, обрабатывали ли вы его уже.Теперь это может не работать идеально, поскольку s3 не всегда предоставляет самые последние данные о чтениях после обновлений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...