2017-05-29 13 views
0

AWSラムダ機能を使用してS3にビデオをアップロードしたいとします。このビデオはローカルコンピュータでは使用できません。私は 'ダウンロードURL'を持っています。私はそれを私のローカルコンピュータにダウンロードしてS3にアップロードしたくありません。私はラムダ機能を使ってこのビデオファイルをS3に直接入れるソリューションを探しています。バッファやストリーミングを使用すると、私はたくさんのメモリを消費します。これにはより効率的なソリューションがありますか?AWSラムダを使用してS3にダウンロードURLをアップロードする

本当にありがとうございます。

  • は、AWS S3 SDK

をURLからファイルをダウンロードして、使用してアマゾンS3へ/tmp

  • アップロードに保管してください:

  • +0

    ようこそStackOverflow! FROMファイルをどこにコピーしているのかを明確にしてください。 –

    +0

    こんにちはJohn、私のプロジェクトでは、APIの背後にあるビデオをアップロードする必要があります。これらの動画はクラウドで利用でき、ダウンロードURLがあります。私はそれをローカルでダウンロードせずにAmazonラムダを使ってS3に直接送る必要があります。 – Dasu

    +0

    「ビデオはクラウドで利用可能です」と言われると、どこで入手できますか? S3、Google、Dropboxから?それともランダムなURLからですか? –

    答えて

    0

    あなたは確かでしょうAWSラムダ関数を書くことができます完全なファイルをダウンロードするのは、「ビット」でストリーミングするのではなく、最も簡単です。ただし、データの格納にはのディスク容量が500MBのという制限があることに注意してください。ダウンロードが500MBを超える場合は、その一部をダウンロードして複数パートのアップロードとしてアップロードするために、いくつかのクリエイティブなプログラミングを行う必要があります。

    ダウンロード方法は、Webファイルをダウンロードするライブラリを使用してください。

    1

    私は同じ質問をして、/tmpのディスク制限に依存しない以下の簡単な解決策を開発しました。ダウンロードストリームをファイルのようなオブジェクトとして使用します。

    特長:AWSラムダはPython 3.6組み込みboto3とurllib3

  • を使用して

    • ない外部のpythonモジュールは、urllib3て
    • 効率的な接続やメモリー使用量が大きいファイルをダウンロードするために、良い内蔵読み出しがチャンクいますプール管理
    • 設定可能なupload_fileobj組み込みマルチパートおよびスレッドアップロードの使用

      import boto3 
      import botocore.vendored.requests.packages.urllib3 as urllib3 
      
      def lambda_handler(event, context): 
      
          url='http://yourdownloadurl/file.tgz' # put your url here 
          bucket = 'aws-s3-bucket' #your s3 bucket 
          key = 'folder/filename' #your desired s3 path or filename 
      
          s3=boto3.client('s3') 
          http=urllib3.PoolManager() 
          s3.upload_fileobj(http.request('GET', url,preload_content=False), bucket, key) 
      
  • 関連する問題