PythonでS3に画像をアップロードしてみたので手順をまとめました。
S3とは
AWS S3(Amazon Simple Storage Service)は、Amazon Web Services(AWS)が提供するスケーラブルなオブジェクトストレージサービスです。
ファイルやデータを「オブジェクト」として保存します。各オブジェクトはファイルデータに加え、メタデータ(例えば、ファイルの作成日時やユーザー定義のタグ)を持つことができます。
オブジェクトは「バケット」と呼ばれるコンテナに保存されます。バケットは一意の名前を持ち、S3内でオブジェクトを整理するための最上位の階層です。
S3に画像をアップロードする
import requests
import boto3
# --------------------------------------------------
# S3クラス
# --------------------------------------------------
class S3:
def __init__(self) -> None:
self.s3 = boto3.client(
's3',
aws_access_key_id='aws-access-key-id',
aws_secret_access_key='aws-secret-access-key',
region_name='region-name'
)
def upload_image(self, bucket_name: str, image_name: str, image_url: str) -> dict:
"""
S3に画像をアップロードする関数
"""
bucket = bucket_name
key = image_name
try:
response = requests.get(image_url, stream=True)
response.raise_for_status()
except requests.exceptions.RequestException as e:
return {
'statusCode': 400,
'body': f'Failed to fetch image from URL: {e}'
}
body = response.content
contenttype=response.headers.get('Content-Type', 'image/png')
try:
self.s3.put_object(Bucket=bucket, Key=key, Body=body, ContentType=contenttype)
return {
'statusCode': 200,
'body': 'Image uploaded successfully.',
}
except Exception as e:
return {
'statusCode': 500,
'body': f'Failed to upload image: {e}'
}
# --------------------------------------------------
# メイン関数
# --------------------------------------------------
def main():
bucket_name = 'your-bucket-name'
image_name = 'your-image-name.png'
image_url = 'https://example.com/path-to-image.png'
instance = S3()
result = instance.upload_image(bucket_name, image_name, image_url)
print(result)
if __name__ == "__main__":
main()
今回はここまでです。