#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.