Я новичок в службе AWS SQS, чтобы понять поведение триггера SQS лямбда-функции. Я написал простой вариант использования с двумя лямбда-функциями. Я использовал для этого стандартный SQS, поскольку порядок сообщений не важен.
Lambda 1 (logi c): записывает от 1 до 50 в очередь SQS как 50 различных сообщений.
Lambda 2 (триггер лямбда для очереди SQS): (размер пакета 10, concurreny undefied ) Печатает номер, полученный из очереди. (Можно увидеть это в журналах облачных часов)
def lambda_handler(event, context):
# TODO implement
print (event)
print("*")
print(json.loads(event['Records'][0]['body'])['search_query'])
time.sleep(5)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Сценарий 1: Когда я пишу всего 5-10 сообщений в очередь, все сообщения принимаются и обрабатываются в лямбда-выражении (проверено в журналах cloudwatch).
Сценарий 2: Когда я записываю 50 сообщений в очередь: при мониторинге очереди показывает, что все сообщения получены. (нет сообщений в доступном состоянии или в статусе в полете). Принимая во внимание, что когда я go и проверяю журналы cloudwatch, вызывается только 14 экземпляров лямбда, которые обрабатывают 14 сообщений и распечатывают детали в журналах cloudwatch.
ПРИМЕЧАНИЕ: Для двойной проверки у меня есть внес изменения в Lambda 2, чтобы записать сообщение в DynamoDB, который также содержит только 14 деталей сообщения.
Может кто-нибудь знает, что происходит с этими сообщениями.
Редактировать 1: Когда параллелизм установлен на 1, все 50 сообщений обрабатываются лямбда-функцией.
Редактировать 2: Спасибо за предложения, мы обнаружили, что проблема в том, как мы читали сообщения. json .loads (event ['Records'] [0] ['body'])
Наше предположение было независимо от размера пакета, SQS отправит только одно сообщение лямбда.
После выполнив пару тестов, мы выяснили, когда лямбда-функция просто печатает сообщение (что означает отсутствие задержки в выполнении), мы видим, что SQS передает только одно сообщение за раз, даже если размер пакета установлен на 10. Однако, когда есть задержка (time.sleep (5)), затем мы видим, что SQS передает одно сообщение, 2 сообщения, 7 сообщений для некоторых лямбда-вызовов. Как именно работает размер пакета SQS при интеграции с Lambda. (Добавлен код Lambda2 для справки)