Botoを使用してPythonからAWSを操作する(S3編)


はじめに

BotoはPython用のAWSのSDKである。Botoを使用することで、Amazon S3やAmazon EC2をPythonから操作することができる。今回は、Botoを使用してAmazon S3を操作する際のTipsをまとめた。

準備

以下の「準備」までしておく。
Botoを使用してPythonからAWSを操作する(入門編)

Tips

バケットの作成

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('[バケット名]')
bucket.create()

バケット名がすでに存在している場合には、botocore.errorfactory.BucketAlreadyExistsエラーが返ってくる。

バケットの削除

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('[バケット名]')
bucket.delete()

バケット名が存在しない場合には、botocore.errorfactory.NoSuchBucketエラーが返ってくる。

すべてのバケットを取得

import boto3

s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket)

実行結果


s3.Bucket(name='[バケット名1]')
s3.Bucket(name='[バケット名2]')
...

バケット内のすべてのオブジェクトを取得

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('[バケット名]')
for object in bucket.objects.all():
    print(object)

実行結果

s3.ObjectSummary(bucket_name='[バケット名]', key=u'[ファイル名1]')
s3.ObjectSummary(bucket_name='[バケット名]', key=u'[フォルダ名1]/')
s3.ObjectSummary(bucket_name='[バケット名]', key=u'[フォルダ名1]/[ファイル名2]')
...

バケットのサイズを取得する

s3 = boto3.resource('s3')
bucket = s3.Bucket('[バケット名]')
bucket_size = 0
for object in bucket.objects.all():
    bucket_size += object.size

print('Bucket Size: {} bytes'.format(bucket_size))

実行結果

Bucket Size: [サイズ] bytes

ファイルをダウンロードする

import boto3

s3 = boto3.resource('s3')
s3.Object('[バケット名]', '[ファイル名(S3)]').download_file('[ファイル名(ローカル)]')

ファイルをアップロードする

import boto3

s3 = boto3.resource('s3')
s3.Object('[バケット名]', '[ファイル名(S3)]').upload_file('[ファイル名(ローカル)]')

署名付きURLを生成する

import boto3

s3 = boto3.client('s3')
presigned_url = s3.generate_presigned_url(
  ClientMethod = 'get_object',
  Params = {'Bucket' : '[バケット名]', 'Key' : '[ファイル名]'},
  ExpiresIn = [有効期間(秒)],
  HttpMethod = 'GET')
print(presigned_url)

得られたURLからファイルをダウンロードすることができる。