Estoy tratando de hacer un "hola mundo" con el nuevo cliente boto3 para AWS.
El caso de uso que tengo es bastante simple: obtener un objeto de S3 y guardarlo en el archivo.
En boto 2.XI lo haría así:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
En boto 3. No puedo encontrar una manera limpia de hacer lo mismo, así que estoy iterando manualmente sobre el objeto "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)
Y funciona bien. Me preguntaba si hay alguna función boto3 "nativa" que haga la misma tarea.