タイトル : boto3でS3を使ってみる localstackを試そう 2024
更新日 : 2024-12-22
カテゴリ : プログラミング
タグ :
aws   
python   
boto_3   

AWS localstackを試そう 2024

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"
$ 

その他