본문으로 바로가기
반응형

파이썬으로 AWS의 S3스토리지에 연결하려면 boto3라는 라이브러리를 사용하면 된다.

처음에는 boto2버전을 사용하다가 공식홈페이지에 들어가보니 3버전까지 나와서 3로 갈아탔다.

나는 가상환경을 구축하고 그 위에서 작업했지만 이번 포스팅에서는 가상환경을 구축하지 않고 설명한다.

또한 맥북(OS X)를 사용하므로 대부분을 터미널에서 작업했다.

먼저 아래의 명령어로 boto3를 설치한다.


pip3 install boto3


다음으로 aws 커맨드라인 명령어툴을 설치한다.


pip3 install awscli


이제 작업할 폴더로 들어가서 .aws라는 숨김 폴더를 하나 생성한다.

해당 폴더로 진입하여 credentials라는 파일을 만들고 아래의 내용을 채워넣는다.


[default]
aws_access_key_id = 액세스키
aws_secret_access_key = 비밀액세스키

ACCESS KEY와 SECRET ACCESS KEY는 AWS에 접속해서 직접 받아와야한다.

이 부분은 미리 준비가 되어있다고 가정하고 설명을 생략한다.

다음으로 config라는 파일을 생성하고 아래의 내용을 채워넣는다.


[default]
region=ap-northeast-2

나는 현재 서울 리전을 사용하고 있는데 서울리전은 northeast이다.

다음으로 터미널에서 아래의 명령어를 입력하여 aws 환경설정을 진행한다.


aws configure


그러면 아마 아래와 같이 하나하나 입력할 수 있는 질문이 나올것이다.


AWS Access Key ID : 

AWS Secret Access Key : 

Default region name [ap-northeast-2]:

Default output format [None]:


ACCESS KEY와 SECRET ACCESS KEY는 위에 작성한대로 입력했고 region은 그냥 엔터를 치면 자동으로 northease-2쪽에 잡힌다.

output format은 따로 지정하지 않았다.

먼저 aws s3 콘솔로 들어가서 아래와 같이 폴더를 하나 생성했다.


먼저 업로드부터 테스트해본다.

업로드 할 파일 test.txt파일을 생성하고

아래의 코드로 파이썬 파일도 하나 생성한다.


import boto3


s3 = boto3.client('s3')
s3.upload_file('./test.txt', '버킷이름', 'hide/test.txt')

boto3.client()로 s3를 지정해줬고,

upload_file()을 통해 파일을 업로드하는 형태이다.

인자는 순서대로 업로드할 파일, 버킷이름, 버킷에 저장될 장소와 이름 이다.

실행시켜본다.


위와 같이 정상적으로 업로드가 됐음을 확인할 수 있다.

이제 파일 다운로드도 테스트해본다.

업로드는 boto3.client()를 사용했는데 다운로드는 boto3.resource()를 사용해야 하는 것 같다. (공식 홈페이지 예제에 따르면)

코드를 아래처럼 수정한다.


import boto3


s3 = boto3.resource('s3')

try:
s3.Bucket('버킷명').download_file('hide/test.txt', 'hide.txt')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise

그리고 실행하면 정상적으로 다운로드가 완료된다.

반응형