본문 바로가기
AWS

[AWS S3] Python 코드로 S3 버켓 생성 및 파일 업로드.

by 신입같은 3년차 2018. 10. 5.

 

작성되는 글은 boto3 Docs글을 보고 제 방식대로 해석 및 실행하며작성한 내용입니다.

 

boto3 docs는 우측 링크를 참고하세요 [boto3 Docs]

 

이번 글에서는 기존 Amazon S3에 생성되어있는 버킷 리스트를 가져와 확인하고 버킷을 생성하고 파일을 지정된 버킷에 업로드하는 예제를 확인할 것입니다.

 

리스트를 출력하는데는 S3의 list_buckets()를 사용할 것입니다. 

 

예제와 결과로 확인해 보도록 하겠습니다.

 

 

import boto3

# S3 Client 생성
s3 = boto3.client('s3')

# S3에있는 현재 버킷리스트의 정보를 가져온다.
response = s3.list_buckets()

#print(response)

# response에 담겨있는 Buckets의 이름만 가져와 buckets 변수에 배열로 저장.
buckets = [bucket['Name'] for bucket in response['Buckets']]

# S3 버킷 리스트를 출력.
print("Bucket List: %s" % buckets)

 
 

 

저는 S3에 'image-yunjin'이라는 이름의 버킷을 생성했었습니다. 

 

그래서 다음과 같이 Bucket List에 image-yunjin이 있는것을 확인할 수 있습니다.

 

 

그렇다면 직접 S3콘솔에서 생성하지 않고 코드로 생성할 수 있는지 살펴보겠습니다.

 

 

 

import boto3

# S3 클라이언트 생성
s3 = boto3.client('s3')

# create_bucket()를 통해 버킷 생성. 
s3.create_bucket(Bucket='yunjin-bucket' , CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-2'})

 
 
기존의 document에는 LocationConstraint가 없지만 
저는 region을 ap-northeast-2로 설정을 하였기때문에 버킷의 환경설정에 region을 대한민국 서울로 설정 하였습니다.
 
만약 적지 않는다면 다음과 같은 에러가 발생합니다.

# Error : The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.

 

.aws/config region 맞지 않거나 Bucket이름에 언더바등등 유효하지 않은 문자들이 들어가면 에러가 납니다.

 

해결방법은 region 맞춰주고 Bucket이름도 자신만 알게 만드는것이다.

 

저는 위의 코드로 실행한 결과 yunjin-bucket라는 이름의 Bucket가 생성된 것을 확인할 수 있습니다.

 

 

 

자 , 그럼 버킷도 생성하였으니 가지고 있는 아무 이미지를 S3 버킷에 업로드 해보도록 하겠습니다.

 

업로드를 하는데 사용하는 메서드는 upload_file()입니다.

 

지금부터 코드를 보며 하나하나 알아보도록 하겠습니다.

 

 

 

 

import boto3

# S3 클라이언트 생성.
s3 = boto3.client('s3')

# 업로드할 파일의 이름
filename = 'han.png'

# 업로드할 S3 버킷
bucket_name = 'yunjin-bucket'

# 첫본째 매개변수 : 로컬에서 올릴 파일이름
# 두번째 매개변수 : S3 버킷 이름
# 세번째 매개변수 : 버킷에 저장될 파일 이름.
s3.upload_file(filename, bucket_name, filename)

 

 
 실행 결과를 확인해보도록 하겠습니다. 저는 마침 맥북에 있는 한효주 사진을 업로드 해보았습니다.
 
실습을 진행하며 만든 yunjin-bucket안에 han.png라는 파일이 잘 업로드 되있는것을 확인할 수 있습니다.
 
매개변수에 대한 설명은 따로 소스코드에 주석으로 달아두었으니 참고하시면 될것같습니다.
 
 

 

 

 

이번에 S3를 파이썬으로 해보면서 느낀점은 저처럼 바보같은 사람도 직접 테스트하기 쉽게 잘되있다는 점입니다. 한마디로 사용자들이 쓰기 쉽게 잘 만든것같습니다.

 

앞으로 S3말고도 EC2 , DB도 같이 할예정이니 하나씩 정리해보면서 올려보도록 하겠습니다.

 

 

반응형

'AWS' 카테고리의 다른 글

[ECS]CannotStartContainerError: Error response from dae  (0) 2021.01.27
RDS를 만들어보자  (0) 2020.12.10
[AWS S3] AWS boto3를 이용한 Python + S3 연동  (2) 2018.10.05

댓글