Вы можете написать Лямбда-функцию AWS , которая вызывается сообщением, отправляемым в очередь Amazon SQS. Вы несете ответственность за написание этого кода, поэтому ответ таков: это зависит от ваших навыков кодирования.
Однако, если каждое сообщение обрабатывается индивидуально, в результате вы получите один объект Amazon S3 на каждое сообщение SQS , которое довольно неэффективно для обработки. Тот факт, что файл находится в формате Avro, не имеет значения, потому что каждый файл будет довольно маленьким. Это добавит много накладных расходов при обработке файлов.
Альтернативой может быть отправка сообщений в поток данных Amazon Kinesis , который может объединять сообщения по размеру (например, каждые 5 МБ) или времени (например, каждые 5 минут). Это приведет к меньшему количеству более крупных объектов в S3, но они не будут разделены ни в формате Avro.
Чтобы получить максимальную производительность от столбчатого формата, такого как Avro, объединяет данные в большие файлы, которые будут более эффективными для обработки . Так, например, вы можете использовать Kinesis для сбора данных, а затем ежедневное задание Amazon EMR для объединения этих файлов в многораздельные файлы Avro.
Итак, ответ таков: «Это довольно легко, но вы, вероятно, не хотите этого делать».
Ваш вопрос не определяет, как данные попадают в SQS. Если вместо обработки сообщений сразу после их получения вы хотите, чтобы данные накапливались в SQS в течение некоторого периода времени (например, 1 час или 1 день), вы могли бы написать программу, которая читает все сообщения и выводит их в многораздельные файлы Avro. При этом SQS используется как область временного хранения, что позволяет накапливать данные перед обработкой. Однако он потерял бы любой аспект отчетности в режиме реального времени.