AWS S3の作成からファイルの登録公開まで
AWS S3を作成し、Web公開するまでの手順を解説します。
※ 操作はすべてAWS Python ライブラリ(boto3)を使用して実施します。
以降の内容は以下の記事を前提とします
ロールへの権限付与
必要な権限をロールに付与します。
import boto3
from botocore.exceptions import ClientError
# Configuration constants
PROFILE_NAME = 'resources_dev_admin'
ROLE_NAME = 'ResourcesEnvMainRole'
# List of IAM policies to attach
POLICY_ARNS = [
'arn:aws:iam::aws:policy/AmazonS3FullAccess'
]
# Initialize AWS session and IAM client
session = boto3.Session(profile_name=PROFILE_NAME)
iam_client = session.client('iam')
print(f"Starting to attach policies to role '{ROLE_NAME}' using profile '{PROFILE_NAME}'...")
# Loop through each policy and attach it to the role
for policy_arn in POLICY_ARNS:
try:
iam_client.attach_role_policy(
RoleName=ROLE_NAME,
PolicyArn=policy_arn
)
print(f"Success: Attached {policy_arn.split('/')[-1]}.")
except ClientError as e:
print(f"Error: Failed to attach {policy_arn.split('/')[-1]}.")
print(e.response['Error']['Message'])
print("Process completed.")
S3の作成
import json
import boto3
PROFILE_NAME = 'resources_dev_admin'
BUCKET_NAME = 'bucket-test-20260822-dev0822'
session = boto3.Session(profile_name=PROFILE_NAME)
region_name = session.region_name
s3_client = session.client('s3', region_name=region_name)
try:
s3_client.create_bucket(
Bucket=BUCKET_NAME,
CreateBucketConfiguration={'LocationConstraint': region_name}
)
print(f"Bucket {BUCKET_NAME} created successfully in {region_name}.")
except Exception as e:
print(f"Error creating bucket: {e}")
アップロード試験
クリップボードのイメージをS3にアップロードします
import io
import boto3
from PIL import ImageGrab
PROFILE_NAME = 'resources_dev'
BUCKET_NAME = 'bucket-test-20260822-dev0822'
session = boto3.Session(profile_name=PROFILE_NAME)
region_name = session.region_name
s3_client = session.client('s3', region_name=region_name)
object_key = 'image_files/clipboard_image.png'
print("Fetching image from clipboard...")
img = ImageGrab.grabclipboard()
if isinstance(img, io.IOBase) or img is None:
print("Error: No image found in the clipboard. Please copy an image first.")
else:
image_bytes = io.BytesIO()
img.save(image_bytes, format='PNG')
image_bytes.seek(0)
s3_client.upload_fileobj(
image_bytes,
BUCKET_NAME,
object_key,
ExtraArgs={'ContentType': 'image/png'}
)
print(f"Successfully uploaded image to s3://{BUCKET_NAME}/{object_key}")
一時アクセスURL(Presigned URL)の取得
import boto3
PROFILE_NAME = 'resources_dev'
BUCKET_NAME = 'bucket-test-20260822-dev0822'
OBJECT_KEY = 'image_files/clipboard_image.png'
EXPIRES_IN_SECONDS = 3600
session = boto3.Session(profile_name=PROFILE_NAME)
region_name = session.region_name
s3_client = session.client('s3', region_name=region_name)
presigned_url = s3_client.generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': BUCKET_NAME, 'Key': OBJECT_KEY},
ExpiresIn=EXPIRES_IN_SECONDS
)
print(f"Temporary access URL (Valid for {EXPIRES_IN_SECONDS} seconds):\n{presigned_url}")
S3に登録されたファイルが1日で削除されるライフサイクルルールを適用
import boto3
PROFILE_NAME = 'resources_dev_admin'
BUCKET_NAME = 'bucket-test-20260822-dev0822'
EXPIRATION_DAYS = 1
session = boto3.Session(profile_name=PROFILE_NAME)
s3_client = session.client('s3', region_name=session.region_name)
lifecycle_config = {
'Rules': [
{
'ID': 'DeleteAfterOneDayRule',
'Status': 'Enabled',
'Prefix': '',
'Expiration': {
'Days': EXPIRATION_DAYS
},
'NoncurrentVersionExpiration': {
'NoncurrentDays': EXPIRATION_DAYS
},
'AbortIncompleteMultipartUpload': {
'DaysAfterInitiation': EXPIRATION_DAYS
}
}
]
}
try:
s3_client.put_bucket_lifecycle_configuration(
Bucket=BUCKET_NAME,
LifecycleConfiguration=lifecycle_config
)
print(f"Successfully applied {EXPIRATION_DAYS}-day expiration lifecycle rule to {BUCKET_NAME}.")
except Exception as e:
print(f"Error applying lifecycle configuration: {e}")
S3 の削除(構成が不要になった場合のみ)
import boto3
# Configuration
PROFILE_NAME = 'resources_dev_admin'
BUCKET_NAME = 'bucket-test-20260822-dev0822'
# Initialize an AWS session using the specific profile
session = boto3.Session(profile_name=PROFILE_NAME)
# Create an S3 resource object from the session
s3_resource = session.resource('s3')
bucket = s3_resource.Bucket(BUCKET_NAME)
# 1. Delete all objects (files) inside the bucket
bucket.objects.all().delete()
# 2. Delete the bucket itself
bucket.delete()
print("The bucket and all its contents have been successfully deleted.")