SQS как триггер события для Lambda

#amazon-web-services #amazon-sqs #aws-serverless

#amazon-web-services #amazon-sqs #aws- бессерверный

Вопрос:

Я пытаюсь реализовать службу в рамках бессерверной архитектуры, которая будет принимать «Заказы», которые в основном являются объектами JSON, и каждое X количество заказов запускает лямбда-функцию для обработки этих заказов. Я немного прочитал об Amazon SQS как о опции для чего-то подобного, но хочу получить подтверждение того, что это правильный подход.

Могу ли я использовать SQS для подписки на канал SNS, который публикует заказы, а затем провести лямбда-опрос, который ставит в очередь поступающие заказы на пакетную обработку?

Заранее спасибо.

Комментарии:

1. Да, это будет хороший подход, но если ваши лямбда-исполнения не так много, вы просто используете service, который может запускать лямбда-коды через службу SNS.

2. Спасибо, Абдул. Вы имеете в виду, потому что не так много лямбда-исполнений или потому, что не так много заказов? Эта конкретная система вполне может иметь десятки тысяч или более заказов

Ответ №1:

Я провел некоторые эксперименты и обнаружил, что:

  • Если в Amazon SQS отправляется несколько сообщений с SendMessageBatch()
  • Затем эти сообщения будут переданы одной лямбда-функции AWS в виде нескольких записей в Records параметре
  • Но только до максимального количества записей, установленного размером пакета в лямбда-триггере

Поэтому, если ваша система заказа может отправлять сообщения в SQS в виде пакета, тогда функция Lambda обработает их как пакет (до размера пакета). Однако для этого потребуется «буферизировать» сообщения в системе заказов перед отправкой их в Lambda, что может привести к потере информации, если что-то пойдет не так.

Обычно лучше обрабатывать заказы немедленно, если нет конкретной причины, по которой вы хотите использовать пакет.

Вставка Amazon SNS может быть полезна, если вы хотите «разветвить» заказы на несколько систем, но не является необходимой, если у вас есть только один адресат для сообщений.