#lambda
#lambda
Вопрос:
Мы создали функцию Lambda с событием ObjectCreatedByPut из корзины S3 (без фильтра). Цель lambda — создать / обновить / запустить кодовый конвейер на основе ветки Git. Codepipeline имеет стадию утверждения SNS. Теперь мы заметили, что до тех пор, пока этап утверждения SNS не будет отклонен для потока Codepipeline, Лямбда повторно вызывается несколько раз после того, как каждый Codepipeline проходит этап утверждения SNS, даже если объект S3 остается неизменным. Кажется, что Лямбда получает самозапускающиеся множественные вызовы. Есть ли какая-либо конкретная причина, по которой он вызывается подобным образом, даже если мы не меняем объект? Было замечено, что если мы используем фильтр в корзине S3 для вызова Lambda из определенной папки корзины, этот сценарий не возникает. Пожалуйста, объясните поведение. Я воссоздал функцию Lambda, однако она по-прежнему многократно вызывается для одного и того же события, что нежелательно. Пожалуйста, предложите.
Ответ №1:
Я надеюсь, что документация по вызову aws lambda поможет ниже:
Для асинхронного вызова Lambda добавляет события в очередь перед отправкой их в вашу функцию. Если вашей функции не хватает мощности для обслуживания очереди, события могут быть потеряны. Иногда
ваша функция может получать одно и то же событие несколько раз, даже если
ошибка не возникает.Чтобы сохранить события, которые не были обработаны, настройте свою функцию с очередью просроченных писем.
Ваша функция асинхронная или синхронная? Если события попадают в очередь, они могут выполняться дважды или, по крайней мере, более одного раза.
Я бы посоветовал вам протестировать оба поведения и поделиться результатами, если вы видите поведение, которое не предсказуемо.
Ссылка:
https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html
https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html
https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html