メインコンテンツまでスキップ

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.")

関連記事

AWS S3の作成からファイルの登録公開まで

更新日:2026年08月22日

ITとソフトウェアの人気オンラインコースHP Directplus -HP公式オンラインストア-