AWS Lambda и AWS API Gateway: как отправить двоичный файл?

У меня есть лямбда-функция, которая извлекает файл из s3 с помощью клавиши ввода в событии и должна отправить то же самое клиенту. Я использую следующую функцию, чтобы получить файл из s3

function getObject(key){
  var params = {
    Bucket: "my_bucket",
    Key: key   
  }
  return new Promise(function (resolve, reject){
    s3.getObject(params, function (err, data){
      if(err){
        reject(err);
      }
      resolve(data.Body)
    })
  })
}

Если я отправлю ответ этого обещания (буфера) на context.succeed, он отобразится в виде массива JSON во внешнем интерфейсе. Как я могу отправить его в виде файла? Файлы могут быть файлами ZIP или HTTP-архива (HAR). Ключи s3 содержат соответствующее расширение. Я предполагаю, что это как-то связано с «Интеграционным ответом» в API Gateway. Но не могу понять, где поменять


person Mandeep Singh    schedule 06.04.2016    source источник
comment
Прочтите официальный ответ AWS в этой теме: forum.aws.amazon.com/thread .jspa? threadID = 195218   -  person Mark B    schedule 06.04.2016
comment
Команда API Gateway - Марк Б прав, это официальный статус. Мы работаем над поддержкой сквозной передачи двоичных файлов в будущем, но без ETA.   -  person jackko    schedule 06.04.2016
comment
есть ли обходной путь для этого. Наше полное приложение бессерверное. Мы бы не хотели создавать отдельный экземпляр EC2 только для загрузки.   -  person Mandeep Singh    schedule 06.04.2016
comment
Вы можете сгенерировать предварительно подписанный URL-адрес S3 в своей Lambda, который ваш клиент использует для загрузки.   -  person Bob Kinney    schedule 16.04.2016


Ответы (1)


Хорошие новости: теперь вы можете обрабатывать двоичный ввод и вывод для API Gateway (объявление и документация).

По сути, в вашей лямбда-функции ничего не меняется, но теперь вы можете установить для свойства contentHandling API Gateway Integration значение CONVERT_TO_BINARY.

К сожалению, официальные примеры AWS демонстрируют только бэкэнд HTTP API Gateway, поскольку поддержка AWS Lambda кажется еще не полной. Например, мне еще не удалось вернуть сжатый сжатый контент из AWS Lambda, хотя это должно быть возможно благодаря новой поддержке двоичного кода и утилите сопоставления $util.base64Decode().

person alexcasalboni    schedule 21.11.2016
comment
Не могли бы вы привести несколько примеров? Я абсолютный новичок в AWS, и в настоящее время я пытаюсь загрузить zip-файл в Lambda, и я также хотел бы сделать это локально, используя бессерверные и бессерверные автономные фреймворки (для разработки) - person Marecky; 13.10.2017