タイトル : boto3でS3を使ってみる localstackを試そう 2024
更新日 : 2024-12-22
カテゴリ : プログラミング
boto3のインストール
$ pip install boto3
ソース書き始めたけど、型ヒントが出ないですね。boto3-stubsを入れるようです。
$ pip install boto3-stubs[essential]
S3の操作
【AWS】Boto3のよく使うメソッドのチートシート(S3編)【覚え書き】
import sys
import boto3
# 型ヒント
from mypy_boto3_s3.client import S3Client
s3_client: S3Client = boto3.client(
"s3",
# LocalStackを起動した時の値
region_name="ap-northeast-1",
endpoint_url="http://localhost:4566",
)
target_bucket_name = "sample-bucket-1"
# バケットの存在を確認
try:
response = s3_client.head_bucket(Bucket=target_bucket_name)
except Exception as e:
# ない時は例外発生
# <class 'botocore.exceptions.ClientError'>
# An error occurred (404) when calling the HeadBucket operation: Not Found
print(type(e), e)
sys.exit(1)
# オブジェクトの取得
response = s3_client.head_object(Bucket=target_bucket_name, Key="sample01.txt")
for res_key in ["ContentLength", "LastModified", "ETag"]:
print(f"{res_key} : {response[res_key]}")
# オブジェクト一覧
response = s3_client.list_objects_v2(
Bucket=target_bucket_name,
Prefix="folder1/", # 一覧を取得するフォルダ
)
# ファイル名のリスト
files = [obj["Key"] for obj in response.get("Contents", [])]
print(files)
# オブジェクト一覧 Delimiterを付ける
response = s3_client.list_objects_v2(
Bucket=target_bucket_name,
Prefix="folder1/", # 一覧を取得するフォルダ
Delimiter="/",
)
# ファイル名のリスト
files = [obj["Key"] for obj in response.get("Contents", [])]
print(files)
# ファイルの読み込み
res_get = s3_client.get_object(
Bucket=target_bucket_name, Key="folder1/folder2/sample01.txt"
)
file_content = res_get["Body"].read().decode("utf-8")
print(file_content)
# ファイルの書き込み
content1 = """
XXX
YYY
ZZZ
"""
res_put = s3_client.put_object(
Body=content1, Bucket=target_bucket_name, Key="folder1/folder2/sample02.txt"
)
print(res_put["ETag"])
実行
$ python test01.py
ContentLength : 416
LastModified : 2024-12-22 05:34:16+00:00
ETag : "529269074cd78e833338510f90b620ed"
['folder1/folder2/sample01.txt', 'folder1/folder2/sample02.txt', 'folder1/sample01.txt', 'folder1/sample02.txt']
['folder1/sample01.txt', 'folder1/sample02.txt']
AAA
BBB
CCC
"b5fe14aa1ba34386ea42df98bfbb511f"
$