Размер лямбда-ответа автоматически превышает 6 МБ в nodejs - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть лямбда-функция, я получаю буфер от внешнего API, размер которого приблизительно равен 2,5 МБ, но когда я возвращаю тот же буфер в объекте JSON, он становится больше 7,5 МБ, что больше, чем ограничение размера лямбда-ответа (6 МБ), я Я не уверен, как это происходит. Вот мой код

module.exports.handler = (event, context, callback) => {
  const buffer = getAnswer();
  // This is approx 2.1 MB buffer size
  console.log(`Buffer size ${buffer.byteLength}`);

  const response = {
    headers: {
      'Content-Type': 'application/json',
    },
    isBase64Encoded: false,
    statusCode: 200,
    statusDescription: '200 OK',
    body: JSON.stringify(buffer),
  };
  // Here  size becomes more than 7.5 MB ,I am not sure how it happens
  console.log('This becomes 7.5 MB size', Buffer.byteLength(JSON.stringify(response)), 'bytes');
  context.succeed(response);// Gives error because it exceeds more than 6MB lambda response limit
};

1 Ответ

2 голосов
/ 29 апреля 2019

Проверьте результат JSON.stringify(buffer), и причина будет очевидна.

Когда вы JSON.stringify буфера, буфер сначала преобразуется в объект, подобный этому

{
  "type": "Buffer",
  "data": [byte0, byte1, byte2, byte3, .... ]
}

гдеbyteX - целочисленное значение байта.

Если буфер текстовый / JSON, установите тело в buffer.toString().

Если вам нужно вернуть двоичный тип, рассмотрите возможность добавления двоичного типа к остальнымapi в ApiGateway и возвращает версию данных в кодировке base64.

...