Sto cercando di creare un "mondo di ciao" con il nuovo client boto3 per AWS.
Il caso d'uso che ho è abbastanza semplice: ottenere l'oggetto da S3 e salvarlo nel file.
In boto 2.X lo farei così:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
In boto 3. Non riesco a trovare un modo pulito per fare la stessa cosa, quindi sto ripetendo manualmente l'oggetto "Streaming":
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)
o
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)
E funziona benissimo. Mi chiedevo c'è qualche funzione "nativa" di boto3 che farà lo stesso compito?