SQS вызывает лямбда-функцию снова и снова, почему? - PullRequest
0 голосов
/ 02 мая 2019

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

Вот как работает система:

  1. Файл загружен в корзину S3 (назовем его uploaded-docs).

  2. Загрузка файла в uploaded-docs/input/ вызывает событие в корзине, которое называется FileUploaded.

  3. Событие FileUploaded запускает лямбда-функцию с именем ProcessUploadedFile.

  4. ProcessUploadeFile вызывает Textract для анализа документа. Выходные данные указанного процесса Textract публикуются (после завершения) в теме SNS под названием TextractComplete.

  5. TextractComplete имеет одну подписку, SQS называется TextractOutputQueue.

  6. TextractOutputQueue запускает лямбда-функцию с именем GetOutput. Он должен запускаться только один раз для каждого загруженного файла

Я заметил, что когда файл загружен, GetOutput вызывается снова и снова для файла, и Task timed out after 3 seconds (команда Textract GetDocumentTextDetection, вызываемая через boto3) может быть найдена в журналах, пока она, наконец, не будет превышает.

Я также заметил, что при загрузке нового файла все файлы в корзине снова называются в этом процессе.

Некоторые гипотезы:

  1. Элементы очереди SQS не «расходуются», так что они все еще существуют в очереди после вызова их соответствующих функций Lambda, и поскольку они все еще существуют, они продолжают вызывать функцию.

  2. Лямбда GetOutput застревает в каком-то цикле повторов, и каждый раз, когда он останавливается, он снова вызывает всю функцию. Это не объясняет, почему журналы будут мертвыми, пока я не загрузлю другой документ, и все ранее загруженные документы каким-то образом снова войдут в цикл.

1 Ответ

0 голосов
/ 02 мая 2019

Спасибо всем, что прокомментировали, это было очень просто исправить.Просто увеличьте время ожидания GetOutput до 10 секунд, и проблема остановится.

...