Я намагаюся створити "привіт світ" з новим клієнтом boto3 для AWS.
Випадок використання у мене досить простий: дістаньте об’єкт від S3 і збережіть його у файл.
У boto 2.XI це зробить так:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
У бото 3. Я не можу знайти чистий спосіб зробити те ж саме, тому я вручну ітераюю над об'єктом "Потокове передавання":
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)
або
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)
І це чудово працює. Мені було цікаво, чи є якась "рідна" функція boto3, яка зробить те саме завдання?