1

Amazon S3 の 1 つのバケットから別のバケットにファイルを移動し、移動されたキーの内容を確認する 2 つの Python スクリプトを作成しています。boto の Key クラスに注いだ後、このスタックオーバーフローの質問を調べたところ、ファイルがコピーされた後に「etag」を介してチェックサムを取得する方法がわかりました。

ただし、これはファイルがダウンロード/アップロードされた場合にのみ機能します。検証はまったく別のスクリプトによって行われるため、実際にダウンロードせずにファイルから etag を取得する必要があります。

現在のワークフローは次のとおりです。ファイル 1 はバケットを通過し、boto を使用してすべてのキーをコピーします。次に、出力キーのパスとそれに続く etag を出力します。(buckets[] は送信元と送信先です) これはうまくいきます:

inbuck = conn.get_bucket(buckets[0])                                          
outbuck = conn.get_bucket(buckets[1])                                         
for inkey in inbuck.list():                                                   
    print buckets[1] + ";;" + inkey.key + ";;" + inkey.etag.replace("\"","")  
    out = Key(outbuck)                                                        
    out.key = inkey.key                                                       
    inkey.copy(outbuck,out.key,preserve_acl=True)                             

次に、ファイル 2 はファイル 1 から出力を読み取り、キーが存在することを確認し、宛先でキーの etag を取得して、入力として取得したものと比較する必要があります。ただし、キーはダウンロードされていないため、キーの etag は常に None です。

dstbuck = conn.get_bucket(destination[0])
dstkey = Key(dstbuck)               
dstkey.key = destination[1]    

if dstkey.exists() and dstkey.etag.replace("\"","") == destination[2]:
    PASSED.append(dstkey.key)
else:
    FAILED.append(dstkey.key)

ここでは、dstkey.etag が「None」であるため、プログラムがクラッシュします。誰もこれを回避する方法を知っていますか?

4

1 に答える 1