2017-12-03 21 views
1

私は例えば、パブリックネットワークからファイルをコピーしたい:私のS3バケットに http://myvideo.com/porn/tca-333.mp4 : さんが言わせて: S3://mypublicstorage.example.com/porn/tca-333.mp4 は、AWSラムダを使用。AWS lambdaをnodejsで使用して、パブリックネットワークからaws s3にファイルをコピーする方法は?

問題は、ビデオは2〜10GBのようにかなり大きなサイズになる可能性があります。 スーパーエージェントのようなリクエストライブラリを使ってフェッチするのであれば、そのすべてはおそらくRAMに格納されるため、十分ではありません。

AWS Lambda自体には、500キロバイトのMBディスクiircだけの制限があります。 AWS Lambdaがこの作業をやっても結構ですか?

request.get(srcUrl).then(resp => S3.putObject({Body: resp.body, ...})) 

どんな提案:

私の現在のコードは、多かれ少なかれ、何かに似ていますか?

+0

一時ファイルをディスクに書き込む代わりに、インメモリストリームを利用してAWS Lambdaでこれを行うことができます。実際にはあなたの現在のコードがしているように見えます。ラムダでそのコードを実行しようとしてもうまくいきましたか? –

+0

はい、私はラムダで512 MBのRAMを使ってやろうとしましたが、このエラーが発生しました。 エラー:最大応答サイズはSocket.emitの誤差で (ネイティブ) ... ... に達し(events.js:188:7)コード: 'ETOOLARGE'、応答:未定義} さらに読め「ストリーム」のものから{Writable}を使って行うことがサポートされているようです。 、S3.putObjectsの代わりにS3.multipartUploadを使用します。 本当にそれをsuoededていないtho。 – Ramadoka

答えて

0

この種の仕事では、単純にラムダを使用することはできません。アーキテクチャは次のように設定できます。

  • Amazon SQSのジョブをキューにプッシュするAWSラムダ機能。
  • 実行するEC2インスタンスをセットアップしてキューからジョブを取り出し、ファイルをダウンロードしてS3にアップロードします。
  • 低頻度のワークロードの場合は、オプションでLambdaからEC2インスタンスを開始し、ジョブを処理した後にセルフシャットダウンをプログラムし、キューが空であることを確認できます(オプションでジョブが完了したらEC2を停止します)。
+0

残念ながら、EC2は毎時の費用がかかるので、私はその道を行くことはしませんでした。 このアクションは主に数分以内に実行されます。 5分以上かかるプロセスは実際には見られませんでした。 しかし、私はそれが必要になるまでにAWSのタイムアウト時間が長くなるかもしれないと思う。 – Ramadoka

関連する問題