Ich versuche eine "Hallo Welt" mit dem neuen boto3 Client für AWS zu machen.
Der Anwendungsfall, den ich habe, ist ziemlich einfach: Holen Sie sich ein Objekt aus S3 und speichern Sie es in der Datei.
In Boto 2.XI würde es so machen:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
In Boto 3. Ich kann keinen sauberen Weg finden, um dasselbe zu tun, daher iteriere ich manuell über das "Streaming" -Objekt:
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
chunk = key['Body'].read(1024*8)
while chunk:
f.write(chunk)
chunk = key['Body'].read(1024*8)
oder
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
for chunk in iter(lambda: key['Body'].read(4096), b''):
f.write(chunk)
Und es funktioniert gut. Ich habe mich gefragt, ob es eine "native" boto3-Funktion gibt, die dieselbe Aufgabe übernimmt.