본문 바로가기
Data Engineering/AWS

[AWS] Python에서 AWS S3에 파일, 폴더 업로드/다운로드

by Toritol 2023. 10. 17.
728x90

 이번 글에서는 Python에서 AWS S3에 파일 및 폴더를 업로드하거나 다운로드하는 방법에 대해 살펴보고자 합니다. Python에서는 boto3 패키지를 통해 S3에 파일을 업로드 및 다운로드를 손쉽게 할 수 있습니다. boto3 패키지는 Python용 AWS SDK로, S3 외에도 다른 AWS 서비스와 통합하는 것이 가능합니다.

 

 우선 파일 업로드부터 살펴보겠습니다.

 

  1. 먼저 Python에 boto3 패키지를 설치하고, import 해줍니다.
  2. 다음으로는 AWS S3 access key 정보와 Bucket 명을 입력하는 것을 통해 S3 내의 Bucket과 연결해 줍니다.
  3. 마지막으로 upload_file 함수에 1) 첫 인자에는 업로드하고자 하는 파일이 위치한 경로, 2) 두 번째 인자에는 Bucket 내에 파일을 업로드할 경로를 입력해 주면 됩니다.

 해당 과정은 아래의 코드와 같이 간단합니다.

 

import boto3

s3 = boto3.resource('s3',
                    aws_access_key_id={aws access key id},
                    aws_secret_access_key={aws secret access key})
bucket = s3.Bucket({bucket name})

bucket.upload_file('./data/test_data.csv', 'data/test_data.csv')

 

 resource 대신 client 함수를 사용하여 upload_file 함수 내에 Bucket 명을 입력하는 코드도 있으니 참고하시길 바랍니다.

 

 다운로드 과정도 간단합니다. download_file 함수를 사용하고, 첫 번째 인자와 두 번째 인자의 순서를 바꿔주면 됩니다.

 

bucket.download_file('data/test_data.csv', './data/test_data.csv')

 

 다만 boto3의 단점은 폴더를 업로드/다운로드하는 함수는 따로 없다는 것입니다. 파일 대신 폴더를 다루고 싶다면, 반복문을 활용하면 됩니다. 폴더 다운로드 과정을 예시로 들어보겠습니다. 먼저 prefix를 지정해 주는데, 이는 다운로드하고자 하는 S3 Bucket 내의 폴더 경로를 입력해 주면 됩니다. 이후 코드는 반복문으로 없는 폴더는 생성하고 다운로드하는 것입니다.

 

bucket = s3.Bucket({bucket name})
prefix = 'model/'
save_path = './model/'

for obj in bucket.objects.filter(Prefix=prefix):
    if not os.path.exists(os.path.dirname(save_path+obj.key)):
        os.makedirs(os.path.dirname(save_path+obj.key))
    bucket.download_file(obj.key, save_path+obj.key)

 

 아래의 참고한 글에서는 cloudpathlib이라는 패키지를 활용하였지만, 보편적으로는 boto3만을 활용하는 것 같아 제 글에서는 제외하였습니다.

 

 

<참고>

https://dotiromoook.tistory.com/15

 

[AWS] AWS S3에서 폴더 다운받기 (CloudPathlib)

S3에서 파일은 많이 다운 받아 봤었다 하지만 디렉토리를 통으로 다운받아야 할 일이 생겨 boto3를 사용해서 그대로 다운받아 보려고 시도해보았는데 import boto3 s3 = boto3.client('s3') s3.download_file('버

dotiromoook.tistory.com

 

 

728x90

'Data Engineering > AWS' 카테고리의 다른 글

[AWS] Jupyter Notebook 설치 및 실행  (0) 2022.08.02
[AWS] AWS EC2에 Python3 설치하기  (0) 2022.07.19
[AWS] Windows에서 AWS EC2 접속하기  (0) 2022.07.13

댓글