region별로 s3 생성 후 파일 업로드 밑 다운로드 해보면서 시간비교해보기
일단 s3 접속을 위한 IAM을 만든다.
s3 접속해야되니까 권한 설정하기
csv 다운해서 잘 저장해둔다.
csv에 Access key ID, Secret access key를 복사해서 사용해야한다.
일단 나는 과제가 1kb 10kb 1mb 10mb 파일을 10개씩 업로드 및 다운로드 해보는 거였다.
대충 txt로 용량만 맞춰서 만들었다.
그럼 이제 python boto3를 이용하여 업로드 및 다운로드를 해보자
구글 코랩에서 진행하였다.
파일 드래그하면 자동으로 옮겨진다. zip파일로만 옮겨야됨
!unzip -qq "test.zip" 이렇게 코랩에 치면 압축이 풀린다.
create bucket
import boto3
from botocore.exceptions import ClientError
import logging
ACCESS_KEY = blahblah
SECRET_KEY = blahblah
def create_bucket(bucket_name, region=None):
# Create bucket
try:
s3_client = boto3.client('s3', region_name=region,
aws_access_key_id=ACCESS_KEY, # 액세스 ID
aws_secret_access_key=SECRET_KEY)
location = {'LocationConstraint': region}
s3_client.create_bucket(Bucket=bucket_name,
CreateBucketConfiguration=location)
except ClientError as e:
logging.error(e)
return False
return True
regions = [
"us-west-1",
"us-west-2",
"ap-south-1",
"eu-west-3",
"eu-north-1",
"eu-west-2",
"eu-west-1",
"ap-northeast-3",
"ap-northeast-2",
"ap-northeast-1",
"sa-east-1",
"ca-central-1",
"ap-southeast-1",
"ap-southeast-2",
"eu-central-1",
]
for region in regions:
response = create_bucket(bucket_name="bkhhw2239"+region,region = region)
if not response:
sys.exit()
print("Bucket : " + str(response))
리전이 상황에 따라서 되는곳도 안되는곳도있어서 해보면서 안되는건 뺐다.
이렇게 생성된걸 볼 수 있다.
일일이 삭제하기 귀찮으니 리스트보기 및 삭제도 코드로 진행하자
모든 bucket 및 object 삭제하기
s3 = boto3.resource('s3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY
)
s3_client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY)
response = s3_client.list_buckets()
# 리스트 보기
print('Existing buckets:')
myregion = []
for bucket in response['Buckets']:
myregion.append(bucket["Name"])
# 삭제
for i in myregion:
bucket = s3.Bucket( i )
# object 비우기
bucket.objects.all().delete()
#버킷삭제
s3_client.delete_bucket(
Bucket = i)
파일 이름 가져오기
import glob, os
files = dict(_1KB=[],_10KB=[],_1MB=[],_10MB=[])
os.chdir("/content/1KB")
for file in glob.glob("*.txt"):
files["_1KB"].append(file)
os.chdir("/content/10KB")
for file in glob.glob("*.txt"):
files["_10KB"].append(file)
os.chdir("/content/1MB")
for file in glob.glob("*.txt"):
files["_1MB"].append(file)
os.chdir("/content/10MB")
for file in glob.glob("*.txt"):
files["_10MB"].append(file)
아마 로컬에서도 비슷하게 하면 될것같다.
UPLOAD
import time
import sys
def upload_file(file_name, bucket, object_name=None):
"""Upload a file to an S3 bucket
:param file_name: File to upload
:param bucket: Bucket to upload to
:param object_name: S3 object name. If not specified then file_name is used
:return: True if file was uploaded, else False
"""
# If S3 object_name was not specified, use file_name
if object_name is None:
object_name = file_name
# Upload the file
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
response = s3_client.list_buckets()
print('Existing buckets:')
myregion = []
for bucket in response['Buckets']:
myregion.append(bucket["Name"])
for region in myregion:
print(f"{region} 업로드 시작 ")
for key,value in files.items():
os.chdir('/content/'+key[1:])
start = time.time()
for filename in value:
upload_file(filename,region)
print(f"region : {region} | data : {key} 소요시간 :", time.time() - start)
bucket list에 차례대로 파일을 넣고 시간을 잰다.
리전별로 시간이 다른걸 확인할 수 있다.
신기한건 꼭 가깝다고 소요시간이 적은건 아니다.
Download
s3 = boto3.resource('s3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY
)
for bucket in myregion:
# select bucket
my_bucket = s3.Bucket(bucket)
start = time.time()
for s3_object in my_bucket.objects.all():
# Need to split s3_object.key into path and file name, else it will give error file not found.
path, filename = os.path.split(s3_object.key)
my_bucket.download_file(s3_object.key, filename)
print(f"region : {bucket} | 소요시간 :", time.time() - start)
다운로드 시간 마찬가지로 이것도 리전마다 다름 ㅇㅇ
다 끝났으면 아까 위에 코드를 활용해서 버켓을 삭제하고 aws의 iam도 삭제하자
끝~
'학교공부 > 클라우드' 카테고리의 다른 글
serverless (0) | 2021.06.04 |
---|---|
CloudNoSQL (0) | 2021.05.27 |
7장 CloudStorage (0) | 2021.05.22 |
AWS VPC, instance, 보안그룹, ec2, putty 실습 (0) | 2021.05.18 |
7장(EBS) (0) | 2021.05.16 |