Мой текущий рабочий процесс выглядит следующим образом:
Пользователь помещает файл в ведро s3 -> ведро s3 запускает событие лямбда -> лямбда обрабатывает файл в ведре s3. Он также вызывает другие лямбды.
Я хочу обработать сценарий, когда несколько пользователей будут одновременно сбрасывать файлы в корзину s3. Я хочу обработать файлы так, чтобы файл, помещенный первым, обрабатывался первым. Чтобы справиться с этим, я хочу, чтобы лямбда обрабатывала каждый файл за 15 минут (например).
Итак, я хочу использовать SQS для постановки в очередь событий сброса входного файла. S3 может инициировать событие для SQS. Событие cloudwatch может запускать лямбду каждые 15 минут, а лямбда может опрашивать очередь SQS на предмет первого события отбрасывания файла s3 и обрабатывать его.
Проблема с SQS заключается в том, что стандартные очереди SQS не соответствуют порядку, а очереди FIFO SQS несовместимы с S3 (ссылка: Ошибка при настройке уведомлений из корзины S3 в очередь FIFO SQS из-за обязательного суффикса ".fifo")
Какой подход я должен использовать для решения этой проблемы?
Спасибо,
Свагатика
Есть ли у кого-нибудь обходной путь? застряли в таком же сценарии.
Мы придумали решение, в котором событие s3 запускает фиктивную лямбда -> фиктивная лямбда обрабатывает события одно за другим и записывает в SQS -> SQS ставит сообщения в очередь. Событие cloudwatch активируется каждые 15 минут и запускает основную лямбду. Эта лямбда получает события Cloudwatch и опрашивает sqs на предмет любых сообщений. Если есть, он берет самое старое сообщение и обрабатывает его.





Amazon S3 может запускать функцию AWS Lambda, которая затем помещает информацию о файле в очередь FIFO Amazon SQS.
Есть новая возможность, при которой SQS может запускать Lambda, но вам придется поэкспериментировать, чтобы увидеть, как / работает ли это с очередями FIFO. Если это сработает, это поможет избавиться от «15 минут».
FIFO SQS еще не может активировать лямбда (на сегодняшний день)