Как загрузить большие файлы с S3 на сервер, не раздутая лямбда-память? - PullRequest
1 голос
/ 28 мая 2019

Я разрабатываю конвейер, который выглядит следующим образом -

(NodeJS) Загрузка файла -> S3 -> Лямбда (записывается в nodejs, запускается из файла: созданное событие) -> Java Server (с использованием CXF / JAX-RS). Мы надеемся, что Lambda сможет избежать загрузки большого файла в память, прежде чем пересылать его на мой Java-сервер. Есть метаданные, связанные с файлом S3, которые мне также нужны, прежде чем связываться с моим Java-сервером (поэтому я не могу просто переслать поток, мне нужно проверить связанные метаданные и затем переслать содержимое файла вместе).

Я читал документы AWS (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property),, что заставило меня поверить, что s3.getObject (). CreateReadStream (), вероятно, мой лучший выбор для загрузки содержимого файла без загрузки всего файла Я заметил, что createReadStream () может быть передан по каналу, но я не добился успеха в том, чтобы заставить канал работать как часть многоэтапной загрузки (что, я думаю, мне нужно сделать). pipe () может работать только с записываемыми файловыми потоками.

var requestToJavaService = https.request(options, res => {
    console.log('Service Response statusCode:', res.statusCode);
    console.log('Service Response headers:', res.headers);

    res.setEncoding('utf8');
    res.on('data', chunk => {
      console.log('Service Response: ' + chunk);
    });
    res.on('end', () => {
      console.log('Connection to Service closed');
    });
    res.on('error', e => {
      callback(new Error(e));
      console.log('Encountered an error while attempting to connect     to Service: ' + e.message);
    });
  });

s3.getObject({ Bucket: srcBucket, Key: srcKey })
    .createReadStream()
    .on('error', function(err) {
      console.log('encountered error from s3 read: ' + err);
    })
    .pipe(
      requestToJavaService,
      { end: true }
    )

Я не женат ни на одной из идей, которые я изложил здесь, поэтому любые дополнительные комментарии / предложения будут очень благодарны.

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