Поток в файловую систему из приложения AWS Lambda NodeJS?

#node.js #amazon-web-services #aws-lambda

#node.js #amazon-веб-сервисы #aws-lambda

Вопрос:

У меня есть функция AWS Lambda (NodeJS), которая создает огромную структуру данных.

Создание структуры данных потребляет около 2 ГБ памяти.

Наконец, я хочу отправить данные в S3 в виде файла / объекта.

Самое простое, что нужно сделать, это преобразовать структуру в гигантскую строку, записать в / tmp, а затем нажать на S3, но такой подход снижает лимит памяти в 3 ГБ.

Мне интересно, есть ли способ записи в / tmp построчно, чтобы он не уничтожал оставшуюся часть моей памяти.

Может кто-нибудь указать мне правильное направление?

Спасибо!

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

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

Ответ №1:

AWS Lambda / tmp на самом деле имеет только 512 МБ пространства и является отдельным ограничением от памяти функции.

Вы, вероятно, достигли предела в 3 ГБ, потому что вы преобразуете структуру в строку в памяти, что означает, что у вас есть 2 ГБ исходных данных, а затем 2 ГБ преобразования строки (ну, 1 ГБ, а затем ошибка)

Вы упомянули, что у вас есть:

функция AWS Lambda (NodeJS), которая создает огромную структуру данных.

Однако, как правило, при работе с большими данными подход заключается в разделении рабочей нагрузки между несколькими лямбдами, никогда не загружая ее в одну лямбду, поскольку это противоречит дизайну лямбд (ограничения памяти являются четким указанием).

Поэтому, если возможно, я бы рекомендовал разделить рабочую нагрузку между несколькими лямбдами, но если это невозможно в вашем случае использования, вы можете обратиться к AWS EC2 или более простой в работе с AWS Fargate, и в этом случае вы не столкнетесь с какими-либо ограничениями, которые у вас есть с Lambda.