2017-10-27 4 views
0

Hier ist die Situation: Wir verwenden einen Datenladedienst, um etwa 1 TB von JSON-Dateien aus einem Verzeichnis in s3 aufzunehmen. Wir möchten diese Dateien stapelweise in das Aufnahmeverzeichnis laden, damit unser Ladedienst nicht überlastet wird. Wir machen dieses Batching mit einem lokalen Python-Skript, das die Boto3-Client-Kopiermethode verwendet. Hier ist ein Beispiel von boto3 der docs:Tut boto3 ein GET und dann ein PUT, wenn ein Schlüssel in s3 kopiert wird?

import boto3 
s3 = boto3.resource('s3') 
copy_source = { 
    'Bucket': 'mybucket', 
    'Key': 'mykey' 
} 
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') 

Wenn boto3's copy method verwendet wird, gibt es keinen Grund zu glauben, dass der Client die Datei mit dem Schlüssel zugeordnet ist, das Herunterladen und dann eine PUT in die neue otherbucket/otherkey Lage tun?

Ich weiß, dass es eine Gebühr für alle Operationen in s3 gibt, also versuche ich im Grunde sicherzustellen, dass wir dafür keine Kosten bekommen und dass wir unsere eigene Bandbreite nicht so verschwenden.

Antwort

4

Dies ist ein PUT+Copy. Es ist eine einzelne Anforderung, die an den Ziel-Bucket gesendet wird und den Quell-Bucket und das Objekt angibt.

Es handelt sich nicht um einen Download/Upload, aber für die Anforderung PUT gegen den Ziel-Bucket und eine GET-Anforderung, die der Ziel-Bucket an den Quell-Bucket zum Abrufen des Inhalts sendet.

Die Daten werden intern innerhalb von S3 übertragen. Daher wird Ihre Internetbandbreite nicht verwendet, aber der Quellen-Bucket wird für bereichsübergreifende Bandbreite berechnet, wenn sich die Quellen- und Ziel-Buckets in verschiedenen Regionen befinden. Dies wird mit einer niedrigeren Rate als die "out to the Internet" -Berechnung berechnet.

Siehe: Copying Objects in a Single Operation

Verwandte Themen