AWS Python SDK 사용 방법
AWS Python SDK를 사용하여 오브젝트 스토리지를 사용하는 방법은 아래와 같습니다.
Last updated
import boto3
from botocore.exceptions import ClientError
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def create_bucket(bucket_name):
try:
s3_client.create_bucket(Bucket=bucket_name)
print("Bucket ["+bucket_name+"] has been created.")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name="test-bucket"
create_bucket(bucket_name)Bucket [test-bucket] has been created.import logging
import boto3
from botocore.exceptions import ClientError
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def delete_bucket(bucket_name, region=None):
try:
s3_client.delete_bucket(Bucket=bucket_name)
print("Bucket ["+bucket_name+"] has been deleted.")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name="test-bucket"
delete_bucket(bucket_name)Bucket [test-bucket] has been deleted.import boto3
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
if __name__ == "__main__":
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
response = s3_client.list_buckets()
print('--Existing buckets--')
if not response['Buckets']:
print("There's no existing bucket.")
else:
for bucket in response['Buckets']:
print(f'{bucket["Name"]}')--Existing buckets--
test-bucket
test-bucket1
test-bucket2import logging
import boto3
from botocore.exceptions import ClientError
import os
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def upload_file(file_name, bucket, object_name=None):
# 업로드할 오브젝트 이름이 명시되지 않으면, 기존 파일 이름으로 업로드
if object_name is None:
object_name = os.path.basename(file_name)
try:
response = s3_client.upload_file(file_name, bucket, object_name)
print("File ["+file_name+"] is uploaded to bucket ["+bucket_name+"] as object ["+object_name+"]")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
file_name="file/demofile.txt"
bucket_name="test-bucket"
object_name = "objectfile.txt"
upload_file(file_name, bucket_name, object_name)File [file/demofile.txt] is uploaded to bucket [test-bucket] as object [objectfile.txt]import logging
import boto3
from botocore.exceptions import ClientError
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def download_object(bucket_name, object_name, local_path):
try:
s3_client.download_file(bucket_name, object_name, local_path)
print("File ["+object_name+"] is downloaded\nfrom bucket ["+bucket_name+"] to local path ["+local_path+"]")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name="test-bucket"
object_name = "objectfile.txt"
local_path = "file/downloaded_file.txt"
download_object(bucket_name, object_name, local_path)File [objectfile.txt] is downloaded
from bucket [test-bucket] to local path [file/downloaded_file.txt]import boto3
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def list_objects(bucket_name, max_keys):
response = s3_client.list_objects(Bucket=bucket_name, MaxKeys=max_keys)
print('List all objects in the bucket')
print('Object List')
object_num=0
while True:
print('- IsTruncated=%r' % response.get('IsTruncated'))
print('- Marker=%s' % response.get('Marker'))
print('- NextMarker=%s' % response.get('NextMarker'))
for content in response.get('Contents'):
print('\tName : %s\tSize : %d\tOwner : %s' % \
(content.get('Key'), content.get('Size'), content.get('Owner').get('ID')))
object_num+=1
# IsTruncated 값이 true 일때 다음에 조회할 지점을 알기 위해 현재의 NextMarker 값을 Maker로 지정
if response.get('IsTruncated'):
response = s3_client.list_objects(Bucket=bucket_name, MaxKeys=max_keys,
Marker=response.get('NextMarker'))
else:
break
print("Total Object Count : %d" % (object_num))
if __name__ == "__main__":
bucket_name = 'test-bucket'
max_keys = 3
response = list_objects(bucket_name, max_keys)List all objects in the bucket
Object List
- IsTruncated=True
- Marker=
- NextMarker=test-file-03
Name : test-file-01 Size : 4096 Owner : clouduser
Name : test-file-02 Size : 4096 Owner : clouduser
Name : test-file-03 Size : 4096 Owner : clouduser
- IsTruncated=True
- Marker=test-file-03
- NextMarker=test-file-06
Name : test-file-04 Size : 4096 Owner : clouduser
Name : test-file-05 Size : 4096 Owner : clouduser
Name : test-file-06 Size : 4096 Owner : clouduser
Total Object Count : 6import logging
import boto3
from botocore.exceptions import ClientError
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def delete_file(bucket_name, object_name):
try:
response = s3_client.delete_object(Bucket=bucket_name, Key=object_name)
print("Deleted a file ["+object_name+"] from bucket ["+bucket_name+"]")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name="test-bucket"
object_name = "demofile.txt"
delete_file(bucket_name, object_name) Deleted a file [demofile.txt] from bucket [test-bucket]import json
import logging
import boto3
from botocore.exceptions import ClientError
import os
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def set_bucket_policy(bucket_name, bucket_policy):
try:
response = s3_client.put_bucket_policy(
Bucket=bucket_name, Policy=bucket_policy)
print("Bucket policy is set")
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name = "test-bucket"
# 오브젝트 링크 사용을 허용할 웹페이지 지정
webpage_url = "https://my-webpage.com/"
bucket_policy = {
"Version": "2008-10-17",
"Id": "preventHotLinking",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": f"arn:aws:s3:::{bucket_name}/*",
"Condition": {
"StringLike": {
"aws:Referer": [
f"{webpage_url}*"
]
}
}
}
]
}
# 버킷 정책을 JSON dictionary 형식에서 String으로 변환한 후 적용
bucket_policy = json.dumps(bucket_policy)
set_bucket_policy(bucket_name, bucket_policy)Bucket policy is setimport logging
import boto3
from botocore.exceptions import ClientError
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
def retrive_bucket_policy(bucket_name):
try:
response = s3_client.get_bucket_policy(Bucket=bucket_name)
print("Retrive bucket policy of bucket ["+bucket_name+"]")
print(response['Policy'])
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == "__main__":
bucket_name="test-bucket"
retrive_bucket_policy(bucket_name)Retrive bucket policy of bucket [test-bucket]
{"Version": "2008-10-17", "Id": "preventHotLinking", "Statement": [{"Sid": "1", "Effect": "Allow", "Principal": {"AWS": "*"}, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::test-bucket/*", "Condition": {"StringLike": {"aws:Referer": ["https://my-webpage.com/*"]}}}]}import boto3
service_name = 's3'
endpoint_url = 'https://kr.cafe24obs.com'
region_name = 'US'
access_key = '[access_key]'
secret_key = '[secret_key]'
s3_client = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
if __name__ == "__main__":
bucket_name = "test-bucket"
s3_client.delete_bucket_policy(Bucket=bucket_name)
print("Bucket policy is deleted from bucket ["+bucket_name+"]")Bucket policy is deleted from bucket [test-bucket]