Что хорошего в том, чтобы сжать AWS лямбда-ответ, чтобы избежать ограничения в 6 МБ? - PullRequest
3 голосов
/ 26 мая 2020

У меня есть Lambda, которая выполняет несколько вызовов DynamoDB, создает большой строковый объект JSON в качестве ответа и передает клиентскому приложению через API Gateway. Естественно, в API Gateway установлен параметр «Кодирование содержимого включено», и все данные передаются по inte rnet в сжатом виде.

Проблема в том, что сам лямбда-ответ не сжимается и достигает 6 МБ ответа. предел. Можно ли сжать лямбда-ответ, а затем естественным образом распаковать его на стороне клиента?

Я проверил node.js библиотеки, такие как JSZip и ADM Zip, и был удивлен тем, что, несмотря на то, что они позволяют хранить в памяти вывод для распакованных данных, они не позволяют вводить в память, например, строку, буфер или что-то, только файлы. Lambda уже имеет несколько ограничений и сюрпризов, связанных с работой с файлами, поэтому я бы хотел избежать следующего избыточного рабочего процесса:

  1. создать JSON объект
  2. сохранить его как временный файл внутри лямбда-среда
  3. загрузить файл с помощью библиотеки архивирования для сжатия и возврата в API-шлюз

Есть ли более естественный способ решения проблемы?

1 Ответ

0 голосов
/ 26 мая 2020

Есть несколько способов справиться с этим, немного изменив архитектуру:

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

  2. Сохранение части или всего ответа в S3 (либо подготовленных, если ответ является статическим c, либо созданным «на лету», если это динамический c) и верните URL объекта клиенту для последующего извлечения.

...