AWS SQS отправляет из Lambda, должен ли я использовать «Добавить пункт назначения»?

#amazon-web-services #amazon-sqs

#amazon-web-services #amazon-sqs

Вопрос:

У меня есть лямбда, которая запускается сообщением, поступающим в очередь SQS. Я хочу выполнить некоторую обработку в лямбде, а затем переслать сообщение в другую очередь SQS для дальнейшей обработки другим лямбда. Похоже, я могу сделать это двумя разными способами:

  1. В конструкторе AWS Console Lambda пользователь с помощью функции «Добавить пункт назначения» определяет очередь SQS в качестве пункта назначения
  2. Написать node.js код для отправки сообщения в SQS из моего лямбда-кода

Какой предпочтительный / правильный / рекомендуемый способ сделать это? Каковы преимущества и недостатки каждого из них?

Ответ №1:

Функция назначения довольно новая.

Одним из преимуществ является то, что действие назначения запускается службой AWS Lambda, а не самой функцией. Это может быть весьма полезно в ситуациях, когда функция Lambda не имеет доступа к месту назначения.

Например, представьте VPC, у которого нет доступа к Интернету. Функция AWS Lambda, настроенная на использование этого VPC, не сможет вызывать API Amazon SQS, поскольку он находится в Интернете. Однако использование пункта назначения Amazon SQS будет работать, потому что служба AWS Lambda отправит сообщение, и это будет сделано за пределами VPC. (В качестве альтернативы вы можете использовать конечную точку VPC для SQS, но это всего лишь пример.)

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

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

1. Нужно проверить одну вещь… В документации говорится: «Lambda опрашивает очередь и вызывает вашу функцию синхронно с событием, содержащим сообщения очереди». Учитывая, что пункты назначения работают только в том случае, если лямбда-функция вызывается асинхронно, использование пункта назначения может не сработать. Протестируйте его и сообщите нам, что вы обнаружили!

Ответ №2:

Если ваш поток включает в себя так много небольших задач, для каждой из которых требуется разный тип полезной нагрузки, вы можете подумать о написании небольшого кода для вызова каждой из них. В качестве вашего окончательного ответа мы можем рассмотреть возможность возврата всех результатов на основе всех небольших задач, чтобы вы могли отслеживать все процессы и регистрировать их в журналах CloudWatch.

Если ваш поток зависит от окончательного ответа, для каждого кода состояния выполнения, например:

  • {Status: OnSuccess} : вызывает тему SNS
  • {Status: OnFailure} : отправляет в очередь SQS

Эта функция помогает сократить объем кода и сделать ваш Lambda более чистым и понятным.

Ответ №3:

Лучше написать код для отправки вашего сообщения. Поскольку AWS уже предлагает функции отправки сообщений, вам просто нужно передать параметры.

AWS также рекомендует удалить сообщение программно.

SQS отправляет сообщение

SQS удаляет сообщение

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

1. Если функция AWS Lambda запускается Amazon SQS, функция Lambda не должна удалять входящее сообщение. Это обрабатывается службой AWS Lambda.

2. Да, согласен, что он будет автоматически удален lambda после ответа 200 @john. Но для большей безопасности и поддержания идемпотентности лучше всего удалить сообщение программно