2017-09-15 5 views
1

AzureストレージからS3まで〜100万ファイルを移動したいと考えています。私はAzure python sdkとboto3を使ってこのpythonスクリプトを書いた。AzureブロブストレージからS3にデータを効率的にコピー

marker = None 
while True: 
    batch = azure_blob_service.list_blobs(
     container, marker=marker) 
    # copy blobs in batches 
    for blob in batch: 
     blob_name = blob.name 
     current_blob = azure_blob_service.get_blob_to_bytes(
      copy_from_container, blob_name) 
     s3_client.put_object(
      Body=current_blob.content, 
      Bucket=s3_bucket, 
      ContentType=current_blob.properties.content_settings.content_type, 
      Key=blob_name) 
    if not batch.next_marker: 
     break 
    marker = batch.next_marker 

しかし、これは遅いです。

azureからS3にデータを効率的に移動するにはどうすればよいですか?

+0

私はS3で作業していたので、間違っている可能性がありますが、S3はサーバー側のコピーをサポートしていません。正しい?利用可能なオプションはAzureからローカルディスクにBLOBをダウンロードしてS3にアップロードするだけです。右? –

+0

@GauravMantriはい、そういうものは見つかりませんでした。私もあなたに似たようなことをしています。しかし、それらをディスクにダウンロードするのではなく、 'get_blob_to_bytes'を使ってS3にアップロードしています。 –

+0

'get_blob_to_bytes' ....あなたはまだデータをダウンロードしています。あなたがやっていないのは、このデータをローカルディスクに保存することです。そうすれば、ネットワークの観点からは何も得られません。 –

答えて

2

S3は、AzureストレージからS3にデータを移動するために、AzureストレージからブロブをダウンロードしてS3に戻す必要があります。これは、多くのデータをダウンロードしてアップロードする際に、インターネットの速度が影響する場所です。

プロセス全体のスピードを上げたい場合は、このスクリプトをAmazonのVM(理想的にはS3アカウントと同じ地域)内のVMで実行する方法があります。そうすれば、あなたはもっと速くダウンロードすることができます(Amazonはあなたが現在持っているものよりも優れたインターネット速度を提供していると仮定します)。そして、同じ地域にアップロードするだけでなく、速くアップロードします。

+0

現在、私はAzure VMでやっています。代わりにEC2で違いを起こすのだろうか? –

+0

うーん、面白い質問です。同じ構成のVMを使用すると、多かれ少なかれ同一のVMが得られるはずです。 Azure VMとStorageのアカウントは同じ地域にありますか? –

+0

No. Azure VMとStorageはある領域にあり、S3は別の領域にあります。 –