Próbuję stworzyć "hello world" z nowym klientem boto3 dla AWS.
Mój przypadek użycia jest dość prosty: pobierz obiekt z S3 i zapisz go do pliku.
W boto 2.X zrobiłbym to tak:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
Na boto 3. Nie mogę znaleźć prostego sposobu na zrobienie tego samego, więc ręcznie iteruję po obiekcie „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)
lub
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)
I działa dobrze. Zastanawiałem się, czy jest jakaś "natywna" funkcja boto3, która będzie wykonywać to samo zadanie?