amoto S3のbotoを使用して同じバケットとの間で大きなファイル(> 5GB)を移動する必要があります。このためには、etagsにmd5の合計を使用しないmultipart APIを使用する必要があります。amazon S3で2つの大きなファイルが同じかどうかを確認するにはどうすればいいですか?
私のコードは正しいと思うが(確か98%だと思うが)、オリジナルを削除する前に新しいコピーが壊れていないことを確認したい。しかし、私は両方のオブジェクトをダウンロードし、それらをローカルで比較する以外は方法を見つけることができませんでした.5GB +ファイルはかなり長いプロセスです。
記録のために、以下は私がbotoで大きなファイルをコピーするコードですが、これは誰かを助けるかもしれません。私の問題に対する良い解決策がない場合、誰かがバグを発見し、データが壊れるのを防ぐかもしれません。
import boto
copy_size = 1000000000 #1e9
bucket_name = 'mybucket'
orig_key_name = 'ABigFile'
dest_key_name = 'ABigFile.clone'
s3 = boto.connect_s3()
mybucket = s3.get_bucket(bucket_name)
key = mybucket.get_key(orig_key_name)
mp = mybucket.initiate_multipart_upload(dest_key_name) #keyname
print 'key size: ', key.size
count = 1
start = 0
end = -1
while end < key.size-1:
print 'count: ', count
start = end + 1
end = min(key.size -1 , start + copy_size)
mp.copy_part_from_key(bucket_name, orig_key_name, count , start, end)
count+=1
mp.complete_upload()
このコードは、元のキーサイズ> = 5368709121バイトでのみ動作します。
〜1kBの小さなファイルを2つ使用してテストします。 – istruble
@istruble:うーん、マルチパートは5BM +チャンクでしか動作しません。しかし、私はいくつかのファイルだけをテストすることができ、アマゾン部分にはバグがなく、テストが網羅的であることを願っています。 – ascobol
ありがとうございます。私は今日何か新しいことを学んだ。 – istruble