2016-07-28 8 views
7

私のs3バケットにあるファイル(ビデオとイメージ)の選択で構成されるZipファイルを作成する必要があります。ラムダノードを使用してS3のファイルからS3上にzipファイルを作成

以下のコードを使用しているときの問題は、すぐにラムダのメモリ制限に達したことです。

async.eachLimit(files, 10, function(file, next) { 
    var params = { 
     Bucket: bucket, // bucket name 
     Key: file.key 
    }; 
    s3.getObject(params, function(err, data) { 
     if (err) { 
      console.log('file', file.key); 
      console.log('get image files err',err, err.stack); // an error occurred 
     } else { 
      console.log('file', file.key); 
      zip.file(file.key, data.Body); 
      next(); 
     } 
    }); 
}, 
function(err) { 
    if (err) { 
     console.log('err', err); 
    } else { 
     console.log('zip', zip); 
     content = zip.generateNodeStream({ 
      type: 'nodebuffer', 
      streamFiles:true 
     }); 
     var params = { 
      Bucket: bucket, // name of dest bucket 
      Key: 'zipped/images.zip', 
      Body: content 
     }; 
     s3.upload(params, function(err, data) { 
      if (err) { 
       console.log('upload zip to s3 err',err, err.stack); // an error occurred 
      } else { 
       console.log(data); // successful response 
      } 
     }); 
    } 
}); 
  • は、ラムダを使用して、このことが可能であり、または私は別の のアプローチを見て必要がありますか?

  • 圧縮ZIPファイルに書き込むことは可能ですか?メモリの問題を多少排除するか、圧縮前にファイルを収集する必要がありますか?

ご協力いただければ幸いです。

答えて

1

複数のストリームをオブジェクトにパイプする方法がわからないため、ストリームを使用するのは難しい場合があります。私はこれを標準のファイルオブジェクトを使って何度もやってきました。それは多段階のプロセスであり、かなり高速です。 LambdaはLinuxで動作するので、system/tmpディレクトリを含め、すべてのLinuxリソースが手に入ります。

  1. 生成するGLOBパッケージを使用)、「一過性」またはものは何でも
  2. 使用s3.getObject(のために働くには/ tmpコールサブディレクトリを作成し、
  3. 過渡を/ tmp /にファイルオブジェクトを書きます/ tmp/transientからのパスの配列[]
  4. 配列とzip.addLocalFile(配列[i])をループします。
  5. zip.writeZip( 'tmp/files.zip');
+0

私が見ることができる唯一の問題は、lambdaがtmpディレクトリの500mbの記憶域に制限されていることです。この場合、最終的なジップサイズも制限されます。 – Rabona

+1

.zipプロセスの横にあるファイル処理を実行しているにもかかわらず、その量のデータがある場合は、5分の実行時間枠内で関数が完了できることを確認してください。私の最大のデータサイズは通常、1回の実行につき約20〜25mgです。 –

+0

@Rabonaラムダ経由でこの問題を解決できましたか?私は同じ問題を抱えている。約100MBの画像を含む1.5GBのビデオファイルを圧縮する必要があります。私たちは記憶がなくなります。我々はまた、同じ画像でより小さなビデオファイル(〜1GB)を試し、タイムアウトを得る。あなたが私たちを助けることができる有用なものを発見したかもしれないと願っています。 – Forer

関連する問題