AWS の新しいboto3クライアントで「Hello World」を実行しようとしています。
私が持っているユースケースはかなり単純です: 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 関数があるのだろうかと思っていました。