前回の記事でboto3を使ったファイル操作について紹介したので、ついでにバケットの操作についても紹介しておこうという記事です。
前回同様、公式ドキュメントはこちらです。
S3 — Boto3 Docs 1.17.84 documentation
バケット名の一覧取得
存在するバケットの一覧は以下のコードで取得できます。
import boto3
s3 = boto3.resource("s3")
for bucket in s3.buckets.all():
print(bucket.name)
"""
blog-work-sample1
blog-work-sample2
~ 以下略 ~
"""
バケットの作成
新規バケットの作成は以下のコードで実行できます。
引数は必ず名前付き引数で渡す必要があります。また、CreateBucketConfigurationは省略できないようです。
s3.create_bucket(
Bucket="blog-work-sample3",
CreateBucketConfiguration={
'LocationConstraint': 'ap-northeast-1'
}
)
"""
s3.Bucket(name='blog-work-sample3')
"""
バケット名の名前空間は全てのユーザーで共有されており、しかも全てのリージョンでも共有されています。
そのため、誰かが既に作っているバケット名を指定しているとエラーになるので注意が必要です。
以下のようなエラーが出ます。
try:
s3.create_bucket(
Bucket="sample",
CreateBucketConfiguration={
'LocationConstraint': 'ap-northeast-1'
}
)
except Exception as e:
print(e)
"""
An error occurred (BucketAlreadyExists) when calling the CreateBucket operation:
The requested bucket name is not available. The bucket namespace is shared by all users of the system.
Please select a different name and try again.
"""
バケットの削除
中身が空のバケットであれば、単純にdelete()メソッドを呼び出すだけで消えます。
ただし、中にオブジェクトがある場合はエラーになるので、先にそれらを消しておく必要があります。
bucket = s3.Bucket("blog-work-sample3")
bucket.delete()