Как прочитать все сообщения из SQS, собрать все эти сообщения и сохранить их как один файл JSON в корзину S3, используя лямбда-Java SDK? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь прочитать все сообщения из SQS, собрать все эти сообщения и сохранить их как один файл JSON в корзину S3, используя лямбда-Java SDK?

В моей реализации участвуют следующие шаги

  1. Создание стандартного SQS и отправка 500 сообщений на этот SQS

  2. Запись лямбда-чтения всех сообщений из этого SQS с использованием цикла while (до сообщенияколичество становится равным нулю)

  3. После прочтения всех сообщений из этого SQS теперь эта лямбда должна будет объединить все полученные сообщения в ArrayList и преобразовать массив в один файл JSON исохранить этот JSON-файл в S3-контейнере

Теперь я застрял на шаге 3, так как AWS расширяет несколько экземпляров лямбда при чтении сообщений SQS, поэтому я не могу агрегировать полученные сообщенияна одном ArrayList, я должен использовать Dynamo DB, чтобы объединить все сообщения и создать единственный файл JSON и хранить в корзине S3?

Пожалуйста, предложитерешение этой проблемы

Спасибо, Сундар

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Ваш вариант использования более подходит для Kinesis Stream

Поток - это, по сути, очередь, но есть некоторые важные различия, в основном в вашем сценарии эти различия представляют собой размер пакета, который LambdaМожно взять из Kinesis ограничено 10000 событий или 6 МБ, а не 10 событий, как в SQS.Вы можете просто создать поток Kinesis с 1 осколком, что будет означать, что будет работать только 1 лямбда, и он будет читать данные синхронно.Если вы делаете это таким образом, вам не нужно читать из SQS небольшими партиями, и вам не нужно беспокоиться о нескольких экземплярах Lambda

Некоторые полезные ссылки: Использование Lambda с Kinesis в качествеисточник события

0 голосов
/ 26 марта 2019

Установите атрибут ReservedConcurrentExecutions в вашей лямбда-функции на 1, что позволит избежать раскрутки нескольких экземпляров.

enter image description here

...