HAZEL

[S3] 파이썬으로 S3에 접근해서, 대용량 데이터 가져오기 본문

DATA ENGINEERING/AWS

[S3] 파이썬으로 S3에 접근해서, 대용량 데이터 가져오기

Rmsid01 2022. 3. 25. 12:33

 

파이썬 코드로, s3에 있는 대용량 데이터를 가져오는 코드 

 

aws에서 iam에서 만들기

# 필요한 모듈 import 
import boto3

 

2. s3에 접근

: 같은 vpc 나 보안 그룹에 포함되어있는 aws 서버에서는 aws_key 를 입력하지 않아도 되지만, 로컬에서 작업하기 위해서는 아래와 같이 키를 넣어줘야한다. 관련 키 만드는 부분은 다른 글에 정리할 예정이다.

# s3 에 접근하기 위해서 코드 작성
s3 = boto3.client('s3'
                  ,aws_access_key_id='aws에서 iam에서 만들기'
                  ,aws_secret_access_key='aws에서 iam에서 만들기')

 

3. 데이터 가져오기

: 그냥 몇개 가져오도록 작업할 수 있지만, 한번에 1000개씩이 아닌, 많은 데이터를 가져오기 위해서는 paginator을 사용해야한다. 

 

과거에는 아래 코드와 같이 작업을 하였으나, 이제는 get_paginator을 이용해서, list_objects_v2를 사용해야하는 것으로 보인다.

object_list = s3.list_objects_v2(**args)

 

새로 작성한 코드이다.

paginator을 이용하여 iterator을 만든 이후, for 문을 돌려서 해당 데이터가 있다면 가져오는 식으로 작업한다.

def get_object_key_list(**args):
    
    keys = []
    # 1000개씩 반환되는 list_objects_v2의 결과 paging처리를 위한 paginator 선언
    paginator = s3.get_paginator("list_objects_v2")
    page_iterator = paginator.paginate(**args)

    for page in page_iterator:
        contents = page['Contents']
        for log in contents:
            keys.append(log['Key'])

    return keys

 

 

4. 데이터를 가져오는 함수를 넣기

위에서 작성한 함수를 실행하면, 아래와 같은 데이터 리스트들이 output으로 나오게 된다.

get_object_key_list(Bucket='버킷이름 넣기', Prefix='데이터 위치넣기')

 

 

 

 

 

- 참고한 문서
    - https://gaussian37.github.io/python-etc-s3_storage_for_boto3/
    - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nan17a&logNo=221983762741
    - https://asecurity.dev/entry/Python-Boto3-lib-paginator-%ED%86%B5%ED%95%9C-S3-%EB%8C%80%EB%9F%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0
    - https://gonigoni.kr/posts/list-over-1000-files-from-s3/