J'essaye de faire un "bonjour le monde" avec le nouveau client boto3 pour AWS.
Le cas d'utilisation que j'ai est assez simple: obtenir un objet de S3 et l'enregistrer dans le fichier.
Dans boto 2.X, je le ferais comme ceci:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
Dans boto 3. Je ne parviens pas à trouver un moyen propre de faire la même chose, donc j'effectue manuellement une itération sur l'objet "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)
ou
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)
Et cela fonctionne très bien. Je me demandais s'il existe une fonction boto3 "native" qui fera la même tâche?