Лямбда-функция AWS для загрузки / размещения изображения объекта работает только на локальном компьютере. - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть лямбда-функция, которая использует «запрос», чтобы получить поток файла по URL и предположить, чтобы загрузить его в корзину на s3.Он отлично работает на моей локальной машине, используя узел, но не внутри лямбды.После запуска лямбды у меня есть пустой файл с именем, которое я хотел.

Материал, который вы должны знать

  • Функция лямбда - асинхронная
  • Версия узла - 8.10
  • В примере вы видите putObject, но я также пытался с загрузкой
  • Даже при добавлении ручного режима сна на 90-120 секунд, чтобы запустить лямбду,файл не загружен
  • Я пытался использовать context.succeed или обратный вызов («некоторый результат»), но он все равно не работал должным образом

Это важная частькода

module.exports.handler = async(event, context, callback) => {
  const path = 'bucketToUpload';
  const name = 'imageFileName.jpg';
  let options = {
    uri: responseUrl, // This is the url of the image
    encoding: null
  };
  let reqRes = await request(options); // Here I have the stream
  let awsPutRes = await s3.client.putObject({
    Body: reqRes.body,
    Key: name,
    Bucket: path
  }).promise();
};

Буду очень признателен за любую помощь или указания по этому вопросу.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Итак, после еще нескольких попыток я смог решить проблему.

Вот часть кода:

async function upload(fileStream, fileName, bucketName) {
  let params = {
    Body: fileStream,
    Key: fileName,
    Bucket: bucketName
  };
  await s3.client.putObject(params).promise();
}

module.exports.handler = async(event, context) => {
  try {
    let s3UploadParams = {
      uri: imageDownloadUrl,
      encoding: null
    };
    let imageFileStream = await request(s3UploadParams);
    await upload(imageFileStream, s3FileName, bucketName);
  } catch (err) {
    context.fail(null, 'Error trying to upload to aws' + err);
  }
}

Вместо того, чтобы использовать lib запроса, я использую запрос-обещание-нативный для получения потока из URL.

0 голосов
/ 03 октября 2018

Похоже, что вы выдаете в s3 putObject function.

Используйте s3.putObject вместо s3.client.putObject

const s3 = new AWS.S3();

 s3.putObject({
        Bucket: process.env.BUCKET,
        Key: event.key,
        Body: buffer,
 }).promise()

Также эта ссылка для загрузки изображения на s3 с URL поможет вам: здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...